young0105의 등록된 링크

키자드에 등록된 총 271개의 포스트를 확인하실 수 있습니다.

Tistory

[Java] 어노테이션

어노테이션 (Annotation) - 프로그램의 코드에 메타데이터를 추가하는 기능을 제공하는 것 - 컴파일러 or 런타임 시점에 코드를 처리하는 도구들에게 추가적인 정보를 제공함 - 주로 클래스, 메서드, 변수, 매개변수 등에 부착해서 사용됨 - 형식 : @어노테이션(속성1=값1, 속성2=값2, ...) - 코드 가독성 향상 - 자동화된 코드 생성, 테스트, 디버깅 등에 활용 # 빌트인 어노테이션 (Built-in Annotation) - @Override : 상위 클래스나 인터페이스의 메서드를 오버라이드함을 나타냄 - @Deprecated : 해당 요소가 더 이상 사용되지 않음을 나타냄 - @SuppressWarnings : 컴파일러의 경고를 무시하도록 지정함 # 메타 어노테이션 (Meta Annota..

Tistory

[Spring Boot] CSRF (사이트 간 요청 위조)

CSRF (사이트 간 요청 위조, Cross Site Request Forgery) - 웹사이트 취약점 공격 - 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격 - 특정 웹사이트가 사용자의 웹 브라우저를 신용하는 상태임을 노린 공격 방식 - 사용자가 웹사이트에 로그인한 상태에서, CSRF 공격 코드가 삽입된 페이지를 열음 → 공격 대상이 되는 웹사이트는 위조된 공격 명령이 믿을 수 있는 사용자로부터 발송된 것으로 판단함 → 공격에 노출됨

Tistory

[Java] IntelliJ (인텔리제이) 단축키

코드 실행 [Shift] + [F10] 코드 삭제 [Ctrl] + [Y] 코드 복사 [Ctrl] + [D] 코드 이동 [Ctrl] + [Shift] + [방향키]

Tistory

[jQuery] 선택자

직접 선택자 - 전체 선택자 : $("*") - 아이디 선택자 : $("#아이디명") - 클래스 선택자 : $(".클래스명") - 태그 선택자 : $("태그명") - 그룹 선택자 : $("요소1, 요소2, ..., 요소n") - 종속 선택자 1) 해당 요소 중 class a를 갖는 요소 선택 : $("요소명.a") 2) 해당 요소 중 id a를 갖는 요소 선택 : $("요소명#a") 인접 관계 선택자 # 상위 요소 관련 - 요소 a의 부모 요소 선택 : $("요소a").parent() - 요소 a의 모든 상위 요소 선택 : $("요소a").parents() - 요소 a의 상위 요소 중 요소 b를 모두 선택 : $("요소a").parents("요소b") - 요소 a의 상위 요소 b 중 가장 가까운 요소 선..

Tistory

[Java] 객체 지향 프로그래밍 (OOP)과 SOLID 원칙

객체 지향 프로그래밍 - 프로그램을 '객체'라는 기본 요소로 봄 → 이들 간의 관계를 형성하거나 상호작용함으로써 프로그램을 설계/구현하는 방법론 - 객체 : 데이터 (상태)와 데이터를 처리하는 함수 (행동)를 하나로 묶은 것 # 핵심 원리 1) 캡슐화 (Encapsulation) : 객체의 데이터를 외부로부터 직접 접근할 수 없도록 숨기고, 함수를 통해서만 접근하도록 함 → 객체의 내부 데이터를 보호하고, 객체가 받아들일 수 있는 연산을 제어함 2) 상속 (Inheritance) : 한 클래스의 속성/메서드를 다른 클래스가 물려받는 것 → 코드의 재사용성 향상 & 중복된 코드 축소 3) 다형성 (Polymorphism) : 하나의 메서드/클래스가 있을 때, 이러한 것들이 다양한 방법으로 동작하는 것 ex..

Tistory

[Java] Garbage Collection

Garbage Collection : 프로그래밍 언어의 메모리 관리를 자동화하는 역할 - 프로그램이 힙 메모리 영역의 객체들을 더 이상 참조하지 않게 되면, 자동으로 메모리에서 해제됨 - 백그라운드에서 실행되는 Daemon Thread에 속함 - 개발자는 객체의 메모리 해제에 신경을 쓸 필요가 없음 → 메모리 누수 문제 감소 & 더 간결한 프로그래밍 가능 - 프로그램의 안정성 향상 - 단점 : 가비지 컬렉션의 시점과 소요 시간을 정확히 예측하기 어려움 → 고성능 시스템에서는 가비지 컬렉션에 의한 성능 저하를 고려할 것 ⇒ 불필요한 객체 생성 주의 & 객체의 참조를 적절하게 관리

Tistory

[Java] JVM (Java Virtual Machine)

JVM (Java Virtual Machine) : Java 바이트코드(.class 파일)를 OS에 특화된 코드로 변환하여 실행하는 역할을 하는 가상의 실행 환경 # 주요 역할 1) Java 바이트코드 실행 - Java 소스 코드(.java 파일)는 컴파일러에 의해 Java 바이트코드(.class 파일)로 변환됨 → 바이트코드는 모든 JVM에서 실행될 수 있음 2) 메모리 관리 - 객체의 생성과 가비지 컬렉션을 통한 메모리 해제를 담당함 3) 플랫폼 독립성 - 한 번 작성된 Java 코드가 어떤 플랫폼에서든 실행 가능하도록 함 - 플랫폼에 따라 달라질 수 있는 저수준 세부 사항을 추상화함 → Java 바이트코드가 특정 운영체제/하드웨어에 종속적이지 않게 함 4) 보안 - Java 애플리케이션의 실행을 관..

Tistory

[JSP] 웹 컨테이너 (Web Container)

웹 컨테이너 (서블릿 컨테이너) - JSP와 서블릿이 실행될 수 있는 환경을 제공하는 컴포넌트 - URL에서 서블릿을 찾아 실행하고, 서블릿으로부터 결과를 받아 클라이언트에 전달함 # 주요 기능 1) 통신 지원 · HTTP 등의 프로토콜을 통해 클라이언트와의 통신을 지원함 · 요청을 받아 적절한 서블릿을 실행하고, 그 결과를 클라이언트에게 전송함 2) 서블릿의 생명주기 관리 · 서블릿이 로드되어 초기화되고, 요청을 처리하며, 종료되는 과정을 관리함 3) 멀티스레딩 지원 · 클라이언트의 각 요청을 별도의 스레드로 처리함 → 동시에 여러 클라이언트의 요청을 효율적으로 처리 4) 보안 · SSL/TLS 등의 기능을 통해 보안 통신을 지원함 · 웹 리소스에 대한 접근 제어 등의 보안 기능 제공 5) JSP 지원..

Tistory

[Java] 리플렉션 (Reflection)

리플렉션 (Reflection) - 프로그램 실행 중에 클래스의 정보를 분석/조작할 수 있는 부분 - 런타임 시점에 동작으로 클래스의 메서드/필드/생성자 등에 접근하고 호출할 수 있음 - 자바의 핵심 기능 - java.lang.reflect 패키지 # 클래스 정보 가져오기 HTML 삽입 미리보기할 수 없는 소스 # 필드 정보 가져오기 HTML 삽입 미리보기할 수 없는 소스 # 메서드 정보 가져오기 HTML 삽입 미리보기할 수 없는 소스 # 생성자 정보 가져오기 HTML 삽입 미리보기할 수 없는 소스

Tistory

[개발 일지] 항공사 Web 개발 프로젝트 14~15일차 (05/25~05/26)

항공권 구매 내역 - 결제 내역 테이블의 status 컬럼이 1이면 '결제완료', 2이면 '환불처리', 0이면 구매 내역에 출력되지 않음 - 클릭하면 상세 페이지로 이동 항공권 상세 페이지 - 출발일자가 현재일자보다 이후면서, 아직 환불되지 않은 항공권 하단에는 '환불 신청' 버튼 활성화 환불 처리 - 출발일자보다 며칠 전인지에 따라 성인 1인 기준 환불 수수료가 정해짐 - 소아는 성인의 75%만큼의 환불 수수료가 책정됨 (티켓 가격과 동일한 비율) - 유아는 좌석을 점유하지 않으므로, 환불 수수료가 없음 - 실제 공항에서는 '환불 서비스 수수료'를 따로 받지만, 여기서는 고려하지 않음 1) 국내선인 경우 · 날짜와 관계 없이 5,000원으로 책정됨 2) 국제선인 경우 · 90일 이전 : 0원 · 60일..

Tistory

[개발 일지] 항공사 Web 개발 프로젝트 16~18일차 (05/27~05/29)

환불 신청 - 환불 신청 버튼을 누르면 해당 티켓이 국제선인지 국내선인지 확인하고, 그에 해당하는 환불 수수료를 안내함 - 현재 날짜가 출발일보다 며칠 전인지 확인하고, 적용될 수수료에 배경색을 입혀 표시함 # 환불 수수료 안내 페이지 메인 페이지 상단부 - 항공권 예약 페이지와 연동 완료 - 하단부 (공지사항, 주요 서비스, ...)는 다음주 중에 작업할 예정 항공권 예약 # 유효성 검사 추가 - 현재 로그인된 회원의 나이가 소아/유아에 속한다면 항공권 예약 불가능 - 왕복 항공권에서, 첫 번째 일정이 두 번째 일정보다 이후라면 다시 선택하도록 함 - 왕복 항공권에서, 첫 번째 일정과 두 번째 일정의 운항 시간이 겹친다면 다시 선택하도록 함 # 편의성 추가 - 운항 스케줄 조회 버튼을 눌렀을 때, 자동..

Tistory

[Spring Boot] AJAX 통신 시 데이터를 통일된 방식으로 반환하기

사전 준비 # ResponseDto 생성 HTML 삽입 미리보기할 수 없는 소스 - statusCode : HTTP 상태 코드 값 - code : 성공 시 1, 실패 시 -1 - resultCode : 성공 시 "success", 실패 시 "fail" → code 또는 resultCode를 사용해서 script단에서 if 문으로 코드를 나눌 수 있음 - messge : alert 창에 사용할 메시지 - data : 반환할 데이터 # code, resultCode는 static 상수로 선언해서 사용 HTML 삽입 미리보기할 수 없는 소스 예시 코드 # 요청을 받은 Controller에서 데이터 반환 HTML 삽입 미리보기할 수 없는 소스 # AJAX 통신을 실행한 script 부분 HTML 삽입 미리보기할..

Tistory

[개발 일지] 항공사 Web 개발 프로젝트 19~22일차 (05/30~06/02)

회원+비회원 / 관리자 메뉴 분리 - 관리자 레이아웃 분리 - 메뉴를 DB 데이터에 담음 → 선택한 페이지에 따라 보조 메뉴가 출력될 수 있게 함 MySQL로 마이그레이션 대시보드 - 월별 매출액 그래프 : 이번 달을 제외하고, 지난 11개월 간의 매출액 그래프 출력 - 메모 기능 · 각 관리자 계정마다 갖는 개인 메모 공간 · blur 이벤트를 적용해서, 해당 textarea에서 포커스를 벗어날 때마다 내용의 변화가 있다면 memo_tb 갱신 - 이번 달 매출액 - 이번 달 신규 가입 회원 수 - 이번 달 탈퇴 회원 수 - 이번 달에 작성된 고객의 말씀 수 - 처리되지 않은 고객의 말씀 내역 + 링크 - 지난 달 고객의 말씀 유형 비율 - 마일리지샵 인기 브랜드 TOP 5 - 도착지별 이용객 수 순위

Tistory

[개발 일지] 항공사 Web 개발 프로젝트 23~27일차 (06/03~06/07)

관리자용 페이지 # 각 대메뉴별 간단한 메인 페이지 - 회원 탭과 달리, 아래로 내려오는 메뉴가 없어서 필요할 것 같다고 판단함 # 회원 정보 조회 및 회원 강제 탈퇴 # 관리자 정보 조회 및 관리자 등록 회원용 페이지 # 메인 페이지 완성 - 공지사항 최근순 5개 출력 - 자주 묻는 질문 랜덤 5개 출력 # 회원 혜택 및 승급 기준 페이지 # 고객센터 메인 페이지 항공권 마일리지 결제 및 환불 - 마일리지 티켓 가격은 일반 티켓 가격의 0.02배로 설정 - 환불 수수료도 일반 환불 수수료의 0.02배로 설정 기프티콘 이미지 - 마일리지샵에서 사용할 기프티콘 이미지 6월 6일 ~ 6월 7일은 리팩토링 및 CSS 위주로 진행

Tistory

[개발 일지] 항공사 Web 개발 프로젝트 - 결과 정리

# 깃허브 주소 https://github.com/seoyounglee0105/green_airline_project # 설명 PPT # 주요 기능 시연 영상 # 일차별 개발일지 https://young0105.tistory.com/category/Team%20Project/Airlines%20Web%20Project

Tistory

[개발 일지] 항공사 Web 개발 프로젝트 2~3일차 (05/13~05/14)

동적인 레이아웃 구현 지금까지는 레이아웃을 만들 때 자바스크립트는 전혀 사용하지 않았었는데, 이번에는 활용해보았다. 로그인/로그아웃 기능 구현 예매 기능을 만들 때 회원 정보가 필요해서 비밀번호 인코딩 없이 간단하게 만들어두었다.

Tistory

[개발 일지] 항공사 Web 개발 프로젝트 4일차 (05/15)

출발지/도착지 선택 기능 # 자동 완성 - AJAX 통신을 이용해서, input에 값을 입력할 때마다 일치하는 공항이 있는지 확인함 - 공항을 클릭하면 출발지/도착지 input 태그에 값이 입력됨 - 공백은 입력되지 않도록 함 (입력될 때마다 공백을 빈 문자열로 변환) # 목록에서 직접 선택 - '전체 공항 조회'를 누르면 전체 지역/공항 목록을 볼 수 있는 모달창이 출력됨 - AJAX 통신을 이용해서, 지역 이름을 누를 때마다 포함되어 있는 공항 목록이 출력됨 - 공항을 클릭하면 출발지/도착지 input 태그에 값이 입력됨 # 출발지 ↔ 도착지 스왑 기능

Tistory

[개발 일지] 항공사 Web 개발 프로젝트 5~7일차 (05/16~05/18)

항공권 옵션 선택 # 출발지/도착지 선택 기능 - https://young0105.tistory.com/262 - 반대 취항지에 이미 선택한 공항을 선택하면 alert 메세지를 던지고 실행을 취소함 # 날짜 선택 - datepicker 활용 - 가는 날을 먼저 선택해야 오는 날을 선택할 수 있음 → 가는 날 이전인 날을 선택하면 실행을 취소함 - 오는 날이 입력된 상태에서 가는 날을 수정할 때, 오는 날 이후인 날을 선택하면 실행을 취소함 - 현재 날짜보다 이전 날짜를 선택하면 실행을 취소함 - 왕복 ↔ 편도 선택을 변경할 때, 가는 날은 그대로 남아서 넘어가도록 함 ex) 왕복 : 가는 날 2023-06-13, 오는 날 2023-06-14 → 편도 : 가는 날 2023-06-13 # 나이 계산기 - 생..

Tistory

[개발 일지] 항공사 Web 개발 프로젝트 8~11일차 (05/19~05/22)

항공기별 좌석 배치도 생성 - 항공기 정보 페이지 추가 - 좌석 배치도에 따라 좌석 데이터 추가 좌석 선택 페이지 - 스케줄을 선택하면 그 스케줄에 운항하는 항공기 종류에 따라 좌석 배치가 다르게 나타남 - 앞서 선택한 좌석 등급에 해당하는 좌석만 선택 가능 - 이미 예약된 좌석은 선택 불가능 - 모든 좌석을 선택해야 다음 단계로 넘어갈 수 있음 탑승객 정보 입력 및 결제 정보 페이지 - 선택한 티켓 옵션과 좌석 번호를 보여줌 - 탑승객 정보 입력 · 예약자 본인을 탑승객에 포함 옵션 체크 시, 로그인된 유저의 정보를 불러옴 · 입력한 생년월일이 선택한 연령(성인, 소아, 유아)에 부합하는지 확인 · 입력한 생년월일이 날짜 형식에 부합하는지 확인 · 왕복인 경우, 가는 편과 오는 편에 따라 연령 유형이 ..

Tistory

[Spring Boot] CoolSMS를 활용한 문자 발송 기능 구현

https://coolsms.co.kr/ 세상에서 가장 안정적이고 빠른 메시지 발송 플랫폼 - 쿨에스엠에스손쉬운 결제 전용계좌, 신용카드, 계좌이체 등 국내 결제 뿐만 아니라 해용신용카드로 한번의 카드번호 등록으로 자동충전까지 지원합니다. 전용계좌, 신용카드, 계좌이체 등 다양한 결제 방식 coolsms.co.kr # Gradle 의존성 추가HTML 삽입미리보기할 수 없는 소스 코드HTML 삽입미리보기할 수 없는 소스

Tistory

[개발 일지] 항공사 Web 개발 프로젝트 12~13일차 (05/23~05/24)

결제 기능 완성 - 결제 요청 시 예약 내역, 탑승객 정보, 예약 좌석 내역, 결제 내역 데이터 추가 1) 결제 완료 시 결제 내역의 status를 1로 갱신 2) 결제 실패/취소 시 예약 내역 삭제 → ticket_id에 ON DELETE CASCADE 옵션을 걸어두어서 나머지 관련 데이터들도 삭제됨 - 결제 완료 페이지 생성 # 결제 완료 시 문자 발송 - CoolSMS 활용

Tistory

[JavaScript] 비동기 통신 : AJAX

# 비동기식 통신 방식을 사용하지 않을 경우 - 웹 페이지에서 사용자 입력을 받고, 서버로 데이터를 전송하여 새로운 페이지를 받아옴 → 화면이 깜빡이는 등의 불편한 경험을 제공하며, 데이터량이 많아지면 더욱 느려짐 → 개선 : AJAX AJAX 통신 (Asynchronous JavaScript and XML) - 자바스크립트를 사용하여 비동기적으로 서버와 데이터를 주고받는 기술 - 웹 페이지에서 동적으로 데이터를 가져오거나, 업데이트하는 기술 - 서버와 비동기적으로 데이터를 주고받음 → 필요한 부분만 화면을 갱신함 → 화면 전환이 발생하지 않음 (화면이 깜빡이지 않음) - 자바스크립트를 사용해서 서버에 요청을 보내고, 이에 대한 응답을 처리함 · XMLHttpRequest 객체를 사용하여 서버와 통신함 ..

Tistory

[SQL] 커넥션 풀 (Connection Pool)

커넥션 풀 (Connection Pool) - 미리 정해진 개수의 데이터베이스 커넥션을 풀(Pool)에 저장해둠 → 요청이 들어올 때마다 커넥션 풀에서 커넥션을 하나씩 꺼내서 사용함 # 장점 - DB와의 연결을 생성/종료하는 시간/비용 감축 - 불필요한 연결 생성으로 인한 리소스 낭비 감소 - DB 연결을 더욱 효율적으로 관리함 - 성능 향상 (처리 속도 향상) 연결된 프로세스 확인 HTML 삽입 미리보기할 수 없는 소스 - id : 프로세스 아이디 - User : 스레드가 접속하고 있는 MySQL 사용자명 - Host : 사용자 IP 주소 - command : 스레드의 현재 상태 (Sleep, Daemon, Query, Lock) - Time : 프로세스가 현재 커맨드된 상태에서 동작 시간 - Stat..

Tistory

[Spring Boot] 데이터 전송 포맷 : xml / JSON / yml

xml - 태그 형식을 통해 Key와 Value를 구분함 - 태그 안에 태그를 넣어서, 부모-자식 관계 구조를 나타냄 - 단점 : Object와 Array 부분이 xml 포맷 상으로는 구분이 안되는 경우가 있음 JSON - 설명 : https://young0105.tistory.com/136 yml - 설명 : https://young0105.tistory.com/210 # 가독성 비교

Tistory

[Spring Boot] 렌더링 방식 (CSR, SSR)

클라이언트와 서버 간의 데이터 처리 방식 # CSR (Client-side Rendering) - 클라이언트 측에서 렌더링을 처리하는 방식 · 클라이언트가 서버로부터 데이터를 받아옴 → JavaScript를 이용해 동적으로 HTML, CSS, JavaScript를 생성함 → 브라우저에서 렌더링함 - 비동기 통신 (AJAX) - 데이터를 받아서 특정 부분만 렌더링함 # SSR (Server-side Rendering) - 서버 측에서 렌더링을 처리하는 방식 - 서버에서 HTML, CSS, JavaScript를 생성함 → 클라이언트는 이를 그대로 받아와 렌더링함 - Controller → jsp 방식 - 렌더링을 마친 후 클라이언트에게 보냄 - 장점 : 초기 로딩 속도가 빠르고 SEO에 용이함 - 단점 : ..

Tistory

[개발 일지] 항공사 Web 개발 프로젝트 0일차 (기획 단계)

팀 프로젝트 주제 항공사 홈페이지 개발 프로젝트 기간 2023/05/12 ~ 2023/06/07 (변동될 수 있음) 깃허브 주소 https://github.com/seoyounglee0105/green_airline_project 데이터베이스 관련 MyBatis 초반에는 H2 Database를 사용하고, 나중에 샘플 데이터가 준비되면 MySQL로 전환할 예정 협업 툴 Jira 국비지원교육 마지막 팀 프로젝트 주제로 항공사 홈페이지를 하게 되었다. 마지막 프로젝트인 만큼, 팀원 모두 자랑할 만한 주요 기능 하나씩은 맡을 수 있게 주요 기능을 4가지 정했다. 주요 기능부터 개발한 후, 자잘한 기능들도 분담해서 진행할 예정이다. 나는 우선 항공권 예약 + 결제 기능을 맡았다. 주요 기능 # 항공권 예약 + 결..

Tistory

[개발 일지] 항공사 Web 개발 프로젝트 1일차 (05/12)

좌석 선택 기능 - 해당 항공 스케줄에 운항하는 비행기에 존재하는 좌석 리스트를 가져와서 출력함 - 구매자가 미리 선택한 좌석 수만큼 선택 가능 - 해당 스케줄에 이미 예약된 좌석은 선택 불가능 - 좌석 선택 시 그 좌석에 대한 데이터를 불러옴 (AJAX 통신) · 좌석 번호 · 좌석 등급 · 가격 - 가격 결정 로직 · 해당 항공 스케줄의 운항 시간에 따라, 이코노미 좌석 기준 가격이 정해짐 · 비즈니스 좌석은 기본 가격의 4배 · todo) 승객의 연령에 따라 가격 조정

Tistory

[JavaScript] 이벤트

이벤트 등록 HTML 삽입 미리보기할 수 없는 소스 HTML 삽입 미리보기할 수 없는 소스 마우스 이벤트 # click - HTML 요소를 마우스로 눌렀을 때 # dblclick - HTML 요소를 마우스로 두 번 눌렀을 때 # mousedown - 요소 위에서 마우스 버튼을 누르는 동안 # mousemove - 요소 위에서 마우스 포인터를 움직일 때 # mouseover - 마우스 포인터가 요소 위로 옮겨질 때 # mouseout - 마우스 포인터가 요소를 벗어날 때 # mouseup - 누르고 있던 마우스 버튼에서 손을 뗄 때 키보드 이벤트 # keypress - 키를 눌렀을 때 # keydown - 키를 누르는 동안 # keyup - 키에서 손을 뗄 때 폼 이벤트 # blur - 폼 요소에서 포커스..

Tistory

[JavaScript] HTML 렌더링과 JavaScript 실행

HTML 렌더링 순서 1. 서버에서 HTML 문서를 받아옴 2. HTML 문서를 파싱하여 DOM 트리를 생성함 3. CSS 파일을 로드/파싱하여 CSSOM 트리를 생성함 4. DOM 트리와 CSSOM 트리를 결합하여 렌더트리를 생성함 5. 렌더트리를 기반으로 레이아웃을 계산하고, 실제로 화면에 표시될 요소를 결정함 6. 브라우저에서 화면에 표시함 JavaScript 실행 순서 1. HTML 파싱 중 태그를 만나면, 해당 스크립트를 다운로드함 2. 스크립트를 파싱하여 실행 가능한 코드를 생성함 - 이때, 오류가 있으면 실행되지 않음 3. 생성된 코드를 실행함 4. 다음 태그를 만날 때까지 파싱과 실행을 반복함 # 유의사항 - 스크립트 코드가 HTML 파싱 과정에서 실행되는 순서에 따라 예기치 못한 결과가 ..

Tistory

[JavaScript] BOM : document 객체

document 객체 - 웹 문서에서 태그를 만나면 만들어지는 객체 - HTML 문서 정보를 가지고 있음 노드 접근하기 # 태그 선택자 이용 HTML 삽입 미리보기할 수 없는 소스 # id 선택자 이용 HTML 삽입 미리보기할 수 없는 소스 # class 선택자 이용 HTML 삽입 미리보기할 수 없는 소스 # 해당 문서의 form에 접근 HTML 삽입 미리보기할 수 없는 소스 # 포함하고 있는 하위 노드에 접근 HTML 삽입 미리보기할 수 없는 소스 # 요소 생성 HTML 삽입 미리보기할 수 없는 소스 # 요소에 속성 값 할당 HTML 삽입 미리보기할 수 없는 소스 노드 속성 및 메서드 # 노드 내 텍스트에 접근 - 텍스트 가져오기 : 노드명.textContent - 텍스트 입력 : 노드명.textCon..

Tistory

[JavaScript Code] toggle() 활용 예제 코드

HTML 삽입 미리보기할 수 없는 소스

Tistory

[JavaScript Code] AJAX 통신을 이용해서 데이터 가져오기

코드 더보기 HTML 삽입 미리보기할 수 없는 소스 실행

Tistory

[JavaScript] 비동기 통신 기초 : Promise 타입

Promise 객체 - 비동기적으로 실행되는 작업을 처리하고, 그 결과를 콜백 함수 등을 이용해 처리하는 객체 - 어떤 작업의 결과를 반환하는 객체 # Promise의 상태 1) 대기 (Pending) : Promise 객체가 생성되었으나, 아직 처리가 진행되지 않은 상태 2) 이행 (Fulfilled) : Promise 객체가 처리를 완료하여 결과를 반환한 상태 3) 거부 (Rejected) : Promise 객체가 처리를 실패했거나, 오류가 발생한 상태 비동기 작업 처리 - 자바스크립트 엔진은 싱글 스레드로 동작함 Call Stack : 현재 실행 중인 함수를 기록하는 스택 · Java의 스택 메모리와 유사 Message Queue (Task Queue) : 비동기 작업이 완료되었을 때 등록되..

Tistory

[Spring Boot] 리소스 처리 : HOST 컴퓨터의 리소스 활용하기

# 관련 포스팅 - 프로젝트 외부 HOST 컴퓨터에 파일 업로드하기 : https://young0105.tistory.com/242 # 리소스 경로 가칭 설정하기 HTML 삽입 미리보기할 수 없는 소스 # DB 데이터를 받을 Model 클래스 HTML 삽입 미리보기할 수 없는 소스 # jsp 파일 HTML 삽입 미리보기할 수 없는 소스

Tistory

[개발 일지] 학사 관리 시스템 Web 개발 프로젝트 4일차 (04/24)

# 휴학 신청 및 조회 (학생) - 교직원이 신청에 대해 처리하면 상태가 변함 - 아직 처리가 완료되지 않은 휴학 신청은 취소할 수 있음 (delete) # 휴학 신청 처리 (교직원) - 아직 처리가 완료되지 않은 휴학 신청만 리스트에 출력되도록 함 - 해당 신청서 상세 페이지로 들어가서 승인 또는 반려로 처리할 수 있음 # 경로를 지정해서 보낼 수 있는 예외 클래스 생성 - location.href의 값을 매개변수로 받음

Tistory

[Spring Boot] MyBatis xml 파일에서 WHERE ... LIKE 문 사용하기

에러 코드 org.mybatis.spring.MyBatisSystemExceptionnested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: 해결 # MySQL WHERE 컬럼명 LIKE CONCAT('%', #{name}, '%') 위와 같이 사용해야 정상적으로 작동한다.

Tistory

[개발 일지] 학사 관리 시스템 Web 개발 프로젝트 5~6일차 (04/25~4/26)

등록금 관련 # 등록금 고지서 일괄 생성 - 등록금 납부 대상인지 확인 · 졸업/자퇴 상태면 X · 휴학 신청 테이블을 확인해서, 현재 연도-학기까지의 휴학을 승인받았다면 X - 이미 생성되어 있다면 X - 장학금 유형 결정 1) 1학년 2학기 이상이라면 - 직전 학기 성적 평균에 따라 1유형/2유형/해당없음으로 나뉨 2) 1학년 1학기라면 - 성적 데이터가 없기 때문에, 모두 2유형으로 할당함 # 등록금 고지서 페이지 진입 시 - 등록금 납부 대상이 아니라면 고지서 페이지로 진입 불가 # 하드코딩 수정 - 학생 정보 부분을 동적으로 바꿈 학적 상태 - 학생 생성 시 학적 상태 테이블에도 자동으로 '재학' 상태 추가 - 등록금 납부 성공 시, 휴학 상태인 학생이라면 재학 상태로 변경 (데이터 추가) - ..

Tistory

[개발 일지] 학사 관리 시스템 Web 개발 프로젝트 7~8일차 (04/27~4/28)

# 예비 수강 신청 (수강 장바구니) - 현재 학기에 재학 상태가 되는 학생인지 확인 - 신청/취소할 때마다 강의의 현재 인원 변경 - 신청 강의의 정원 초과 가능 - 최대 수강 가능 학점을 넘지 않는지 확인 (18학점) - 자신의 시간표와 겹치지 않는지 확인 - 예비 수강 신청에서는 신청 시 confirm 메시지를 띄움 (선착순이 아니므로) # 수강 신청 - 현재 학기에 재학 상태가 되는 학생인지 확인 - 신청/취소할 때마다 강의의 현재 인원 변경 - 최대 수강 가능 학점을 넘지 않는지 확인 - 자신의 시간표와 겹치지 않는지 확인 - 신청 강의의 정원 초과 불가능 - 수강 신청에서는 신청 시 confirm 메시지를 띄우지 않음 # todo 예비 수강 신청 기간에서 수강 신청 기간이 되면, 예비 수강 신..

Tistory

[개발 일지] 학사 관리 시스템 Web 개발 프로젝트 9일차~종료 (04/30~05/02)

수강 신청 기간 설정 1. 예비 수강 신청 기간 2. 수강 신청 기간 3. 수강 신청 기간 종료 수강 신청 기간이 되면, 예비 수강 신청 목록을 확인함 → 정원 >= 신청인원인 강의는 예비 수강 신청 내역이 수강 신청 내역으로 자동으로 넘어감 → 정원 < 신청인원인 강의는 신청 인원이 0으로 초기화되며, 학생이 직접 신청하도록 함 예비 수강 신청 내역이 있는 강의들은 본 수강 신청이 용이하도록 수강 신청 탭에 들어가면 가장 먼저 출력되도록 함 메인 페이지 교직원으로 접속 시, 현재 처리되지 않은 휴학 신청 내역이 있다면 메인 페이지에서 확인 가능하도록 함 (영상에는 수정 전이지만, 현재는 종 아이콘을 노란색으로 표시해서 눈에 더 잘 띄도록 함) 공지사항/학사일정 페이지와 연결함 페이징 처리 각자의 기능에..

Tistory

[Spring Boot] 암호화 처리

암호화 처리 - 단방향 암호화 : 암호화되고 나면 복호화할 수 없음 → 정보 통신법에서는 단방향 암호화를 지향함 - 양방향 암호화 - 해싱 처리 · 값을 특수한 문자열로 암호화 · 같은 값을 입력하면 동일하게 암호화된 값이 반환됨 · 다른 값을 입력하면 특수한 문자열이 변경됨 → 값이 변경되었음을 빠르게 인식할 수 있게 됨 - 예시 코드 : https://young0105.tistory.com/239 # build.gradle에 의존성 추가 HTML 삽입 미리보기할 수 없는 소스 # 기본 사용 방법 HTML 삽입 미리보기할 수 없는 소스

Tistory

[Spring Code] 암호화 처리를 이용한 회원가입과 로그인

# 관련 포스팅 - 암호화 처리 : https://young0105.tistory.com/238 # WebMvcConfigurer 구현 클래스에 암호화 처리 인코더 선언 HTML 삽입 미리보기할 수 없는 소스 - 암호화 처리는 Service 레이어에서 수행 # UserService HTML 삽입 미리보기할 수 없는 소스

Tistory

[개발 일지] 학사 관리 시스템 Web 개발 프로젝트 0일차 (기획 단계)

팀 프로젝트 주제 대학교 학사 관리 시스템 구현하기 프로젝트 기간 2023/04/21 ~ 2023/05/01 깃허브 주소 https://github.com/seoyounglee0105/university_management_project 초기 구상 기능 - User를 학생/교수/교직원으로 나눔 User ① 학생 1) MY - 내 정보 조회 (개인 정보, 학적 변동 등) - 내 정보 변경 - 비밀번호 변경 - 등록금 내역 조회 - 장학금 내역 조회 - 등록금 납부 고지서 (문서, 입금 계좌 번호 정도?) - 휴학 신청 (신청 → 교직원이 확인해서 승인 → 학적 변동) 2) 수업 - 교과목 조회 (전체 연도/학기의) 3) 수강 - 수강 안내 - 수강 시간표 조회 (해당 학기의) - 수강 신청 - 수강 신청 ..

Tistory

[개발 일지] 학사 관리 시스템 Web 개발 프로젝트 1~3일차 (04/21~04/23)

# 레이아웃 1일차에는 레이아웃 만들려다가 시간을 너무 많이 버려서 진행된 게 거의 없었다. 틀만 만들어 두고 나중에 꾸며야지 했는데.. 신경 쓰여서 그냥 토요일 새벽에 완성했다. 학사 관리 시스템 홈페이지 느낌보다는 대학교 공식 홈페이지 느낌으로 만들어지긴 했는데 깔끔해서 마음에 든다. # 등록금 내역 조회 페이지 테이블도 예쁘게 꾸미고 싶은데 어떻게 할지 모르겠다. # 등록금 납부 고지서 생성 기능 이 기능은 나중에 교직원 쪽으로 넘길 예정이다. 장학금 유형에 따라 최대 장학금액이 정해지고, 학과-단과대에 따라 등록금이 정해지기 때문에 장학금 유형만 미리 정해두면 나머지 값들은 DB에서 알아서 가져와지게 구현해두었다. 장학금 유형은 1학년 2학기부터는 성적을 기준으로 정하면 되겠는데 1학년 1학기는 ..

Tistory

[Spring Boot] 프로젝트 외부 HOST 컴퓨터에 파일 업로드하기

# 관련 포스팅 - 업로드된 파일을 JSP에 가져오기 : https://young0105.tistory.com/243 # form - input 태그 HTML 삽입 미리보기할 수 없는 소스 # 상수 선언 1) 업로드 파일의 최대 크기 2) 업로드한 파일을 저장할 경로 HTML 삽입 미리보기할 수 없는 소스 # file을 받을 DTO HTML 삽입 미리보기할 수 없는 소스 # form 태그를 처리하는 Controller HTML 삽입 미리보기할 수 없는 소스

Tistory

[Spring Code] DAO - Service - Controller 구조 예시

# DAO interface 더보기 HTML 삽입 미리보기할 수 없는 소스 # DAO 쿼리문 xml 더보기 HTML 삽입 미리보기할 수 없는 소스 # Service 더보기 HTML 삽입 미리보기할 수 없는 소스 # Controller 더보기 HTML 삽입 미리보기할 수 없는 소스 - 인증 검사는 반복되므로 인터셉터로 하기

Tistory

[SQL] 쿼리 조건문 (ifnull, nullif, CASE)

- 쿼리 조건문을 사용하면 동적 쿼리를 생성할 수 있음 # ifnull(컬럼명a, b) - 컬럼명 a가 null이면 b를 반환하고, 컬럼명 a가 null이 아니라면 a를 반환함 # nullif(컬럼명a, 컬럼명b) - 컬럼명 a의 값과 컬럼명 b의 값이 동일하면 null을 리턴함 - 컬럼명 a의 값과 컬럼명 b의 값이 다르면 컬럼명 a의 값을 리턴함 # CASE WHEN THEN ENDHTML 삽입미리보기할 수 없는 소스 예시더보기HTML 삽입미리보기할 수 없는 소스

Tistory

[Spring Boot] Controller에서 jsp 파일로 데이터 전달

jsp 파일로 데이터를 전달하는 방법 - Model 또는 ModelAndView를 매개변수로 활용 → ModelAndView는 동적으로 페이지를 반환할 경우 사용함 → 일반적으로는 Model이 더 많이 사용됨 # Model HTML 삽입 미리보기할 수 없는 소스 # ModelAndView HTML 삽입 미리보기할 수 없는 소스 # 예시 코드 더보기 HTML 삽입 미리보기할 수 없는 소스

Tistory

[SQL] COMMENT

컬럼에 코멘트 부여 # 테이블 생성 시점에 부여 HTML 삽입 미리보기할 수 없는 소스 # 테이블 생성 이후 부여 (수정도 가능함) HTML 삽입 미리보기할 수 없는 소스 테이블에 코멘트 부여 # 테이블 생성 시점에 부여 HTML 삽입 미리보기할 수 없는 소스 # 테이블 생성 이후 부여 (수정도 가능) HTML 삽입 미리보기할 수 없는 소스 코멘트 삭제 HTML 삽입 미리보기할 수 없는 소스 코멘트 조회 HTML 삽입 미리보기할 수 없는 소스

Tistory

[Spring Boot] 파비콘 설정 방법

# 파비콘 (favicon) - 웹 브라우저의 주소 창에 표시되는, 웹사이트를 대표하는 아이콘 - favorites + icon 스프링 부트로 실행한 웹 페이지의 파비콘 설정하기 1. 원하는 이미지를 .ico 파일로 변환하고, favicon.ico라는 이름으로 저장 - http://icoconvert.com/ 2. favicon.ico를 src/main/resources/static 폴더에 넣기 3. 파비콘이 바로 적용되지 않는다면, [F12 개발자 도구] → [강력 새로고침]

Tistory

[Spring Boot] 마이그레이션 : H2 DB에서 MySQL DB로 변경하기

마이그레이션 (Migration) - DB 스키마의 변경 내역을 버전 관리하여 이력을 남기고, DB를 이전 버전에서 최선 버전으로 옮기는 일련의 과정 - 스키마를 변경하거나 새로운 테이블/컬럼을 추가하는 등의 작업을 포함함 개발용 H2 DB에서 MySQL DB로 변경하기 # build.gradle에 의존성 추가 HTML 삽입 미리보기할 수 없는 소스 # application.yml 설정 HTML 삽입 미리보기할 수 없는 소스 # DataSource - DB에 접근하기 위한 Connection을 생성/관리 → 해당 Connection 객체를 통해 SQL문을 실행하고 DB에 접근함 → 즉, DataSource는 데이터베이스와 연결하기 위한 인터페이스 - DB 연결/종료 부분을 개발자가 직접 처리하지 않아도 ..

Tistory

[Spring Code] 사용자 정의 예외 클래스와 에러 페이지

# 관련 포스팅 - 예외 처리 : https://young0105.tistory.com/196 # 사용자 정의 예외 클래스 - src/main/java/메인패키지.handler.exception 아래에 생성 HTML 삽입 미리보기할 수 없는 소스 유형 1) 예외 발생 시, 에러 페이지를 반환하기 # @ControllerAdvice - src/main/java/메인패키지.handler 아래에 생성 HTML 삽입 미리보기할 수 없는 소스 # 에러 페이지 - src/main/webapp/WEB-INF/view 아래에 생성 HTML 삽입 미리보기할 수 없는 소스 # 사용하기 - if 문에서 특정 조건에 해당하면 에러 페이지를 반환하는 방식으로 활용할 수 있음 HTML 삽입 미리보기할 수 없는 소스 유형 2) 예..

Tistory

[Spring Boot] Model 클래스 (Entity)와 DTO 클래스

Model 클래스 (Entity) - DB에서 받아온 데이터를 담는 클래스 - 값을 담아둘 수 있고, 필요하다면 기능(메서드)를 추가해둘 수 있음 - 코딩 컨벤션 : SELECT 문을 통해 받아온 Model 객체의 변수명을 'Model명 + Entity'로 짓기 DTO - 데이터 전송 객체 - Form 태그에서 보내야 하는 정보들만 멤버 변수로 갖는 DTO를 각각 선언함 ex) SignInFormDto의 멤버 변수 : id, password ex) SignUpFormDto의 멤버 변수 : id, password, name, age - DTO 간에 멤버 변수가 겹치는 경우 · 상속은 권장하지 않음 (코드 변경이 이뤄지면서 꼬일 수 있음) · 포함 관계로 사용하는 경우는 많음 (초보 단계에서는 우선 사용하지..

Tistory

[SQL] 트랜잭션 (Transaction)

트랜잭션 (Transaction) - 하나의 작업을 수행하는 데 필요한 데이터베이스 연산을 모아놓은 것 - DB에서 수행되는 작업의 단위 - 분리될 수 있는 하나 이상의 데이터베이스 조작 # 기본 형태 HTML 삽입 미리보기할 수 없는 소스 트랜잭션 제어어 (TCL) 1) COMMIT - 트랜잭션 수행이 성공적으로 완료됨을 선언하는 연산 - 트랜잭션의 수행 결과가 DB에 반영되고, 일관된 상태를 지속적으로 유지함 : 실제 물리적 저장장치에 저장됨 2) ROLLBACK - 트랜잭션 수행이 실패함을 선언하는 연산 - DB가 트랜잭션 수행 전의 일관된 상태로 되돌아감 - COMMIT 연산 이전에만 사용 가능 트랜잭션의 특성 (ACID) 1) 원자성 (Atomicity) - 트랜잭션 내의 연산들이 모두 정상적으..

Tistory

[Spring Boot] 트랜잭션 어노테이션

# 관련 포스팅 - 트랜잭션 개념 : https://young0105.tistory.com/229 @Transactional 어노테이션 - 주로 Service Layer에서 insert, update, delete, 복잡한 select를 포함하는 메서드 위에 지정함 · 메서드 호출 시 트랜잭션의 시작 · 메서드 종료 시 트랜잭션의 종료 (정상 종료 → commit) - 트랜잭션 범위 내에서 실행되는 모든 작업이 원자성을 갖도록 보장함 - 트랜잭션의 ACID 성질을 보장하기 위해 다양한 설정 옵션을 제공함 HTML 삽입 미리보기할 수 없는 소스

Tistory

[Java] 데이터 형식 지정

날짜 형식 지정 # 재사용 가능한 클래스 생성 - 위치 : 메인패키지.utils 아래 HTML 삽입 미리보기할 수 없는 소스 # 활용 - Timestamp 형식의 멤버 변수를 'yyyy-mm-dd HH:mm:ss' 형태로 변환해서 반환하는 메서드 HTML 삽입 미리보기할 수 없는 소스 숫자 형식 지정 # 재사용 가능한 클래스 생성 HTML 삽입 미리보기할 수 없는 소스 # 활용 HTML 삽입 미리보기할 수 없는 소스

Tistory

[JavaScript] BOM : history 객체

history 객체 - 현재 창에서 사용자의 방문 기록을 저장하고 있는 객체 - 사용자가 'GET' 방식으로 방문한 사이트의 기록을 남김 # 이전 방문 사이트로 이동 history.back(); # n단계 이전 방문 사이트로 이동 history.go(-n); # 다음 방문 사이트로 이동 history.forward(); # n단계 다음 방문 사이트로 이동 history.go(n); # 방문 기록에 저장된 사이트의 개수 반환 history.length

Tistory

[JavaScript] 함수

함수 - 자바스크립트에서는 함수 자체가 표현식임 → 함수를 변수에 할당하거나, 함수의 매개변수로 사용할 수 있음 함수 정의 # 일반 함수 - 호이스팅 (Hoisting, 갈고리) 기술 지원 : 호출문이 함수 정의문보다 먼저 나와도 호출문이 정상 작동함 - 매개변수가 있는 함수를 매개변수 없이 호출한 경우 : 매개변수가 포함된 코드에는 Undefined 출력 - 매개변수를 배열로 받으면 많은 양을 간단하게 처리 가능 HTML 삽입 미리보기할 수 없는 소스 # 익명 함수 - 이름이 없는 함수 - 호이스팅 기술 미지원 → 호출문이 함수 정의문보다 먼저 나오면 오류가 발생함 - 앞 호출문에 오류가 발생하면, 정상 위치의 호출문도 오류가 발생함 HTML 삽입 미리보기할 수 없는 소스 # 즉시 실행 함수 - 익명 ..

Tistory

[JavaScript] 객체 생성자 함수 (사용자 정의 객체)

객체 생성자 함수 - 객체를 생성할 때 사용하는 함수 - 함수 내에 this 키워드가 사용되면 객체 생성자 함수로 취급됨 - Java에는 없는 개념 (클래스와 유사) - 네이밍 컨벤션 : 객체 생성자 함수의 앞글자를 대문자로 표기함 # 함수 정의 HTML 삽입 미리보기할 수 없는 소스 # 객체 생성 HTML 삽입 미리보기할 수 없는 소스 # 모던 자바스크립트 객체 프로토타입 HTML 삽입 미리보기할 수 없는 소스

Tistory

[JavaScript] 내장 함수

# 데이터 타입을 확인하는 연산자 - typeof 변수 # 데이터 타입 변환 - Number(변수) : 숫자형 타입으로 변환 - parseInt(변수) : 정수형 타입으로 변환 - parseFloat(변수) : 실수형 타입으로 변환 - String(변수) : 문자형 타입으로 변환 - Boolean(변수) : 논리형 타입으로 변환 · 입력된 값 : true · null : false # true/false 판별 - isNaN("문자열") : 숫자가 아닌 문자가 포함되어 있으면 true · isNaN : is Not a Number ex) isNaN("5-3") : true # 문자형 데이터를 코드 형식으로 인식하도록 변환 - eval("문자열")

Tistory

[jQuery] 개요

jQuery - JavaScript를 이용하여 만든 라이브러리 언어 - 더 적게 작성하고, 더 많이 수행하는 경량 JavaScript 라이브러리 - 쉽고 편리한 애니메이션 효과 기능 구현 - 웹 사이트에서 js를 훨씬 더 쉽게 사용할 수 있도록 하는 것 - HTML/DOM 처리 - css 핸들링 가능 - 이벤트 등록 및 삭제 핸들링 가능 - 애니메이션 처리를 쉽게 사용 - AJAX (비동기 통신 처리) 가능 jQuery 사용하기 방법 ① - https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.js - [Ctrl] + [S]로 jquery.js 파일을 js 폴더에 저장 - 부분에 아래 코드 입력 방법 ② - 부분에 아래 코드 입력 jQuery 기본 형식

Tistory

[Spring Boot] MyBatis 설정 및 DAO 구현

MyBatis - Java 객체와 SQL문 사이의 자동 매핑을 지원하는 매퍼 프레임워크 - SQL 쿼리를 작성할 때 xml 또는 어노테이션 이용 가능 → 쿼리 구문을 작성해서 데이터베이스와 통신 수행 - 매우 유연한 구조 · SQL 쿼리와 Java 객체의 매핑 규칙을 세부적으로 지정할 수 있음 · 동적 SQL 쿼리 구문을 작성할 수 있음 MyBatis 설정 1) 의존성 추가 (build.gradle) HTML 삽입 미리보기할 수 없는 소스 2) 설정 (application.yml) HTML 삽입 미리보기할 수 없는 소스 DAO 구현 1. 표준을 위한 인터페이스 정의 - src/main/java/com.example.demo.repository.interfaces. ~ 예시 더보기 HTML 삽입 미리보..

Tistory

[JavaScript] 배열 객체 (Array)

객체 생성 - 배열 요소로 다양한 유형의 데이터를 가질 수 있음 HTML 삽입 미리보기할 수 없는 소스 배열 값 가져오기 HTML 삽입 미리보기할 수 없는 소스 - 존재하지 않는 인덱스 값을 가져오려고 하면 undefined 반환 # 배열을 하나의 문자열로 연결 - 배열명.join(연결문자) : '연결문자'로 배열 요소들을 연결하여 나타냄 # 배열1에 배열2를 연결 - 배열명1.concat(배열명2) # 오름차순 정렬 - 배열명.sort(); · 새로운 배열 생성 X : 기존 배열변수가 정렬됨 # 기존 순서의 역순으로 정렬 - 배열명.reverse(); · 새로운 배열 생성 X : 기존 배열변수가 정렬됨 # 배열의 마지막 요소를 삭제하면서, 그 요소를 반환 - 배열명.pop(); · 새로운 배열 생성 X..

Tistory

[JavaScript] 문자열 객체 (String)

객체 생성 HTML 삽입 미리보기할 수 없는 소스 # 해당 인덱스에 해당하는 값 반환 - 문자열변수.charAt(인덱스) # 앞에서부터 해당 값을 찾아 인덱스 반환 ① 문자열변수.indexOf("문자열a", [n]) 1) 숫자 n을 입력하지 않은 경우 : 가장 먼저 나오는 "문자열a"의 인덱스를 반환함 2) 숫자 n을 입력한 경우 : 인덱스 n번 이후로 가장 처음 나오는 "문자열a"의 인덱스를 반환함 - 존재하지 않는 경우 -1 반환 ② 문자열변수.search("문자열a") : 가장 먼저 나오는 "문자열a"의 인덱스가 출력됨 - 존재하지 않는 경우 -1 반환 # 뒤에서부터 해당 값을 찾아 인덱스 반환 - 문자열변수.lastIndexOf("문자열a", [n]) 1) 숫자 n을 입력하지 않은 경우 : 가장 ..

Tistory

[JavaScript] 날짜 객체 (Date)

객체 생성 HTML 삽입 미리보기할 수 없는 소스 - 월이 0~11로 표기됨 → (원하는 월 - 1)로 표기해서 생성함 # 연도 반환 - 날짜변수.getFullYear() # 월 반환 - 날짜변수.getMonth() - 기준 : 0 (1월) ~ 11 (12월) → 표시할 때는 날짜변수.getMonth() + 1로 사용하기 # 일 반환 - 날짜변수.getDate() # 요일 반환 - 날짜변수.getDay() - 기준 : 0 (일요일) ~ 6 (토요일) 요일을 문자로 나타내기 HTML 삽입 미리보기할 수 없는 소스 # 시간 반환 - 날짜변수.getTime() : 1970/01/01 00:00부터 지나온 시간을 밀리세컨드(ms)로 계산함 날짜 간 차이 구하기 HTML 삽입 미리보기할 수 없는 소스

Tistory

[JavaScript] BOM : window 객체

window 객체 - 브라우저 창이 열릴 때마다 하나씩 만들어지는 객체 - 브라우저 창 안에 존재하는 모든 요소의 최상위 객체 # 새 창 열기 window.open("URL", "새창이름", "옵션1, 옵션2, ..."); - "새 창 이름"이 동일하면 하나만 표시됨 → 여러 팝업을 띄우러면 팝업명을 서로 다르게 설정해야 함 [옵션] 1) 크기 - width : 너비 - height : 높이 2) 위치 - left : 수평 위치 - top : 수직 위치 3) scrollbars : 스크롤바 숨김(no) or 노출(yes) 설정 4) location : URL 주소 입력 영역의 숨김(no) or 노출(yes) 설정 5) status : 상태 표시줄 영역의 숨김(no) or 노출(yes) 설정 6) tool..

Tistory

[JavaScript] BOM : screen 객체

screen 객체 - 현재 사용 중인 화면 정보를 다루는 객체 # 화면 너비 screen.width # 화면 높이 screen.height # 작업 표시줄을 제외한 화면 너비 screen.availWidth # 작업 표시줄을 제외한 화면 높이 screen.availHeight # 사용자 모니터가 표현 가능한 컬러 bit screen.colorDepth

Tistory

[JavaScript] BOM : location 객체

location 객체 - 현재 페이지에 대한 URL 정보를 가지고 있는 객체 - 해당 정보를 편집하면 현재 브라우저 창에 열릴 사이트/문서를 지정할 수 있음 # 브라우저 새로고침 location.reload(); # 현재 페이지의 URL 정보 반환 location.href # 페이지 이동 location.href = "URL주소"; # URL의 호스트 이름 정보 반환 location.hostname # URL의 호스트 이름 설정 location.hostname = "호스트이름"; # URL의 호스트 이름과 포트번호 반환 location.host # URL의 프로토콜 반환 location.protocol # URL의 쿼리(요청 값) 반환 (?로 시작하는 검색 내용 부분) location.search # U..

Tistory

[Spring Boot] 프로젝트 초기 절차 정리

1. 워크 스페이스 생성 + 깃 허브 등록 [이클립스 환경 설정] - UTF-8 설정 - 다크 모드 - 폰트 (D2 Coding) - File Associations에 *.css, *.js, *.jsp 있는지 확인하고 없으면 add → Text Editor를 Default로 (*.css는 css Editor를 Default로) [플러그인] (설치하지 않은 경우에만) - [Help] - [Eclipse Marketplace] 1) jsp 검색 → [Eclipse Enterprise Java and Web Developer Tools] 설치 2) sql 검색 → [SQL Editor] 설치 2. Spring Starter Project 생성 [프로젝트 설정] - 프로젝트 이름 설정 - 패키지 이름 설정 - ..

Tistory

[Spring Boot] TRM (Table Relational Mapping) 기반 모델링

TRM (Table Relational Mapping) - DB의 테이블과 애플리케이션의 객체 간의 매핑 - MyBatis에서는 DB 쿼리를 xml 파일로 작성하고, Java 코드에서 이를 호출하는 방식으로 DB와 상호작용 # 모델 클래스 - DB에서 받아온 데이터를 담는 클래스 (DTO와 구분하기!) - 값을 담아둘 수 있고, 필요하다면 기능(메서드)를 추가해둘 수 있음 # DTO (모델 클래스와 비교) - 데이터 전송 객체 - Form 태그에서 보내야 하는 정보들만 멤버 변수로 갖는 DTO를 각각 선언함 ex) SignInFormDto의 멤버 변수 : id, password ex) SignUpFormDto의 멤버 변수 : id, password, name, age - DTO 간에 멤버 변수가 겹치는 ..

Tistory

[JSP] JSTL 태그 안에 HTML 주석 작성 시 오류

# 관련 포스팅 - JSP 스크립트 : https://young0105.tistory.com/158 - JSTL : https://young0105.tistory.com/167 제목 ${j * 4 + i} 2023.04.12. ... 위와 같은 코드처럼 JSTL 태그 안에 HTML 주석을 작성하면 org.apache.jasper.JasperException 라는 오류가 발생할 때가 있다. (매번 오류가 발생하는 것은 아니고 정상 실행될 때도 있다.) JSTL 태그 안에는 JSP 스크립트 주석을 사용하도록 하자. 제목 ${j * 4 + i} 2023.04.12. ...

Tistory

[Spring Code] 기획서에 맞춰 UI 구성 + 간단한 알고리즘 설계

주어진 과제는 위 기획서에 맞춰 레이아웃만 구성해보는 것이었는데, 시간이 조금 남아서 게시글 개수에 따라 출력되는 수, 페이지 수가 다르게 나타나도록 만들어 보았다. # Controller 더보기 HTML 삽입 미리보기할 수 없는 소스 # jsp 더보기 HTML 삽입 미리보기할 수 없는 소스 # css 더보기 HTML 삽입 미리보기할 수 없는 소스 실행

Tistory

[JavaScript] 제어문 : 조건문과 반복문 (if, switch, for, while)

조건문 if - 조건에 두 개 이상의 비교 연산자가 연달아 사용되면 작동하지 않음 → 논리 연산자로 연결해야 함 if (조건식) { 수행문; ... } else if (조건식) { 수행문; ... } else { 수행문; ... } 선택문 switch - 일치하는 경우의 값이 있을 때만 특정 코드를 실행함 switch (변수) { case 값1 : // 콜론이어야 함에 유의 코드1; // 변수가 해당 값과 일치하면 코드 실행 break; // break를 작성하지 않으면 계속 다음 case로 넘어가게 됨 case 값2 : 코드2; break; case 값3 : 코드3; break; ... // 변수가 모든 case 값과 불일치하거나, 입력되지 않은 경우 [default : 코드n;] } 반복문 for f..

Tistory

[JavaScript] 객체 (Object)

객체 (Object) - 기능(Method)과 속성(Property)을 가지는 것 - 자바스크립트의 객체는 '일급 객체'라고 부름 : 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체 - 프로토타입 : 객체의 속성과 메서드를 모아 놓은 틀 (Java의 클래스와 유사) - 인스턴스 : 프로토타입으로 찍어낸 객체 → 프로토타입의 속성과 함수를 동일하게 사용함 ① 내장 객체 (Built-in Object) - 미리 정의되어 있는 객체 ex) String, Date, Array, Math, ... ② 브라우저 객체 모델 (BOM) - 웹 브라우저의 요소(창, 화면, URL 등)를 객체로 관리함 ex) window. screen, location, history, navigator, ... ③ 문서..

Tistory

[JavaScript] 입력과 출력

화면에 데이터 출력 document.write(값) ; // 줄바꿈 document.write(" ") ; 브라우저의 콘솔에 데이터 출력 console.log(값); 입력형 질문 - 입력된 값은 String 타입 → 숫자를 사용하려면 parseInt 함수로 타입 변환하기 let 변수명 = prompt("질문내용", ["초깃값"]) ; 확인/취소 질문 - 확인 : true / 취소 : false let 변수명 = confirm("질문내용"); 경고창 출력 alert("경고내용");

Tistory

[JavaScript] 수학 객체 (Math)

# 소수점 처리 - 올림 : Math.ceil(변수) - 반올림 : Math.round(변수) - 내림 : Math.floor(변수) → a를 b로 나눈 몫 구하기 : Math.floor(a/b) # 제곱근 - Math.sqrt(변수) # 절댓값 - Math.abs(변수) # 최댓값과 최솟값 - 최댓값 : Math.max(변수1, 변수2, ...) - 최솟값 : Math.min(변수1, 변수2, ...) # 거듭제곱값 - Math.pow(변수, 제곱승) # 원주율 상수 (3.14...) - Math.PI # 난수 생성 - Math.random() : 0 ~ 0.9999... 사이의 소수 난수 생성 - Math.random() * n : 0 ~ (n - 1.9999...) 사이의 소수 난수 생성 - Mat..

Tistory

[Spring Boot] Gradle 빌드 라이브러리 의존성 추가

# AOP 라이브러리 - https://young0105.tistory.com/192 HTML 삽입 미리보기할 수 없는 소스 # Validation 라이브러리 - https://young0105.tistory.com/194 HTML 삽입 미리보기할 수 없는 소스 # JSP 템플릿 엔진 라이브러리 + JSTL 라이브러리 - https://young0105.tistory.com/197 HTML 삽입 미리보기할 수 없는 소스 # MyBatis 라이브러리 - SQL mapper 프레임워크 - 객체와 SQL 쿼리를 매핑하여, 개발자가 SQL 쿼리를 직접 작성하지 않아도 DB에 접근할 수 있게 지원 - MyBatis와 MyBatis-Spring 연동을 자동으로 설정해줌 HTML 삽입 미리보기할 수 없는 소스 # H..

Tistory

[Spring Boot] yml 파일

# yml 파일의 특징 - 엄격한 문법 규칙 · 하위 요소를 입력할 때에는 스페이스 2번 (TAP 키 == 스페이스 2번) · 콜론(:) 이전에는 스페이스 X · 콜론(:) 다음에는 스페이스 1번 · 단, 경로 지정 시의 :는 스페이스 X - 하이픈(-)을 통해 Array임을 나타냄 - properties 파일보다 반복적인 부분이 적음 - 주석 : # HTML 삽입 미리보기할 수 없는 소스

Tistory

[Spring Boot] 세션 (Session)

# 관련 포스팅 - 세션 개념 : https://young0105.tistory.com/160 - JSP 세션 사용법 : https://young0105.tistory.com/163 세션 (Session) - 내장형 서버의 메모리 기반 세션을 사용함 → 세션 데이터가 서버의 메모리에 저장됨 → 서버를 재시작하면 세션 데이터가 모두 삭제됨 → 방안 : 세션 클러스터링, 분산 캐시 (세션 데이터를 외부 저장소에 저장함) # Controller에서 session 객체 가져오기 HTML 삽입 미리보기할 수 없는 소스 세션 관련 설정 - application.properties 또는 application.yml 파일에서 설정 # 세션 타임아웃 설정 (기본값 : 30분) - 세션 유효시간 - 페이지를 이동할 때마다..

Tistory

[Spring Code] 인터셉터 구현 예시

# 관련 포스팅 - 인터셉터 개념 : https://young0105.tistory.com/199 DTO 더보기 HTML 삽입 미리보기할 수 없는 소스 jsp form 태그 더보기 HTML 삽입 미리보기할 수 없는 소스 Controller 더보기 HTML 삽입 미리보기할 수 없는 소스 HandlerInterceptor 인터페이스의 구현 클래스 더보기 HTML 삽입 미리보기할 수 없는 소스 WebMvcConfigurer 인터페이스의 구현 클래스 더보기 HTML 삽입 미리보기할 수 없는 소스

Tistory

[JavaScript] 개요

자바스크립트 (JavaScript) - 사용자의 상호작용에 따라 웹 페이지를 동적으로 제어하기 위한 프로그래밍 언어 - 웹 브라우저에서 동작함 - 클라이언트 측에서 실행됨 - 웹 페이지를 동적으로 만들고, 사용자와 상호작용하는 기능을 구현함 · HTML 요소의 속성 값 변경 · 이벤트 핸들러 등록 → 사용자의 동작에 따라 새로운 기능을 수행하도록 함 · AJAX를 이용하여 서버와 비동기적으로 데이터를 주고받을 수 있음 - 브라우저를 제어하는 데 주로 사용됨 ·서버 측 프레임워크(Node.js 등)를 이용하여 서버 측에서도 사용될 수 있음 # 컴파일러 언어 vs 인터프리터 언어 - 자바스크립트는 기본적으로 인터프리터 언어로 분류됨 · 실행 시간에 소스 코드를 해석하여 실행하는 언어 · 코드를 컴파일하지 않..

Tistory

[JavaScript] 변수와 자료형

변수 선언 - 느슨한 자료형 체크 - 변수 선언 시, 변수에 할당되는 자료형을 명시하지 않아도 됨 - 변수를 지정하고 원하는 값을 할당만 하면 됨 1) var : 같은 이름으로 변수를 재선언할 수 있음 → 잘 사용하지 않음 2) let : 재선언할 수 없으며, 값 변경이 가능한 변수 → 가장 자주 사용됨 3) const : 재선언할 수 없으며, 값 변경이 불가능한 변수 (Java의 상수와 유사) → 처음 선언할 때 값을 초기화해줘야 함 HTML 삽입 미리보기할 수 없는 소스 자료형 1) 문자형 데이터 (string) - 홑따옴표 또는 쌍따옴표로 표기 2) 숫자형 데이터 (number) 3) 논리형 데이터 (boolean) 4) 객체 (object) : 중괄호({})로 묶인 key-value 쌍들의 집합 ..

Tistory

[JavaScript] 연산자

산술 연산자 A + B A와 B를 더하기 A - B A에서 B를 빼기 A * B A와 B를 곱하기 A / B A에서 B를 나누기 A % B A에서 B를 나눈 나머지 A ** B A의 B승 형 변환 - 문자형 데이터 + 문자형 데이터 → 문자형 데이터 - 문자형 데이터 + 숫자형 데이터 → 문자형 데이터 - 산술 연산에서는 문자형 자료를 모두 숫자로 자동 인식함 대입 연산자 (할당 연산자) L value += R value; (왼쪽 항 + 오른쪽 항)을 왼쪽 항에 대입 L value -= R value; (왼쪽 항 - 오른쪽 항)을 왼쪽 항에 대입 L value *= R value; (왼쪽 항 * 오른쪽 항)을 왼쪽 항에 대입 L value /= R value; (왼쪽 항 / 오른쪽 항)의 몫을 왼쪽 항에..

Tistory

[Spring Boot] Validation 관련 : BindingResult 클래스

# 관련 포스팅 - Validation 개념 : https://young0105.tistory.com/194 BindingResult 클래스 - @Valid에 대한 결과 값을 갖는 클래스 → 직접 예외에 대한 클래스를 컨트롤할 수 있음 (POST 요청에서 자주 사용됨) - 단독으로 매개변수에 들어가면 오류 발생 → 반드시 유효성 검사 대상인 다른 매개변수 뒤에 지정되어야 함 - Error에 대한 정보를 담는 DTO 클래스를 따로 만들어서 DTO 형식으로 에러 정보를 보낼 수도 있음 HTML 삽입 미리보기할 수 없는 소스

Tistory

[Spring Boot] 예외 처리 (exception)

예외 처리 # 예외 처리할 클래스로 지정 - 일반적으로, 'handler'라는 패키지를 생성해서 사용함 HTML 삽입 미리보기할 수 없는 소스 # 예외를 처리하는 메서드 HTML 삽입 미리보기할 수 없는 소스 - 최상위 예외 클래스 : Exception → Exception으로 설정하면 따로 지정되지 않은 예외들은 모두 Exception의 메서드로 처리됨 (따로 지정된 예외들은 해당 메서드로 처리됨) # 예외에 관한 DTO를 활용한 응답 처리 DTO 예시 더보기 HTML 삽입 미리보기할 수 없는 소스 응답 메서드 예시 더보기 HTML 삽입 미리보기할 수 없는 소스

Tistory

[Spring Boot] JSP 템플릿 엔진 연결하기

1. build.gradle 파일에서 의존성 추가 HTML 삽입 미리보기할 수 없는 소스 - Tomcat에서 JSP를 처리하기 위한 라이브러리 - Embedded Tomcat : 스프링부트에 내장된 Tomcat 서버를 사용하는 것 → 외부 Tomcat 서버는 설치/구성할 필요 없이 애플리케이션 실행 가능 - tomcat-embed-jasper : Embedded Tomcat에서 JSP를 처리하기 위해 jasper라는 JSP 컴파일러 관련 기능을 제공함 2. .jsp 파일들이 위치할 webapp 폴더 직접 생성 - src > main > webapp > WEB-INF 생성 3. application.properties를 application.yml로 변경하고 파일 수정 HTML 삽입 미리보기할 수 없는 소스

Tistory

[Spring Boot] 필터 (Filter)

필터 (Filter) - 요청/응답을 처리하기 전에 특정 작업을 수행할 수 있는 컴포넌트 - 웹 애플리케이션 영역에서 관리 - Spring Container의 앞에 위치하며, Web Container (WAS) 내에서 실행됨 → 필터는 요청이 필터/서블릿에 도달하기 전에 요청을 가로챌 수 있음 # 실행 시점 - 클라이언트 요청이 실제 서블릿/컨트롤러에 도달하기 전에 실행됨 - 서블릿/컨트롤러의 응답이 클라이언트로 돌아가기 전에 실행됨 # 목적 i. 인증 및 인가 : 사용자의 자격 증명을 확인하고 요청된 리소스에 대한 액세스 권한을 검사함 ii. 로깅 : 요청 및 응답에 대한 로깅 수행 iii. 요청 및 응답 수정 : 헤더, 쿠키, 파라미터 등을 추가/수정/삭제 iv. CORS (Cross-Origin R..

Tistory

[Spring Boot] 인터셉터 (Interceptor)

인터셉터 (Interceptor) - 요청을 처리하기 전과 후에 실행되는 코드 - 컨트롤러에 도달하기 전과 후에 사용자 지정 작업을 수행할 수 있음 - Filter와 매우 유사한 형태 → 차이점 : Spring Context에 등록되고, Spring Container에서 동작함 (Filter는 WAS에서 동작) · 필터는 인증 과정에서 로깅 정도로만 사용함 (어떤 데이터가 들어 있는지 등) - AOP와 유사한 기능 제공 : 선/후 처리함으로써, 비즈니스 로직과 분리시킴 - 용도 · 인증 단계 처리 · 로깅, 인가, 데이터 변환 등의 공통 작업 수행 - 필요에 따라 인터셉터를 여러 개 등록하거나, 특정 경로/패턴에만 적용할 수도 있음 인터셉터 구현 방법 - 예시 코드 : https://young0105.t..

Tistory

[Java] 전략 패턴 (Strategy pattern)

전략 패턴 (Strategy pattern) - 행위를 클래스로 캡슐화해서, 동적으로 행위를 자유롭게 변환할 수 있게 함 - '구조' 디자인 패턴 - Spring의 의존성 주입 (DI)을 전략 패턴을 이용해서 구현할 수 있음 절차 1. 인터페이스 선언 더보기 HTML 삽입 미리보기할 수 없는 소스 2. 선언한 인터페이스의 구현 클래스 생성 더보기 HTML 삽입 미리보기할 수 없는 소스 3. 중간 클래스 생성 - 사용자는 중간 클래스만 알고 있으면 기능을 이용할 수 있음 (내부 알고리즘을 알지 못해도 됨) 더보기 HTML 삽입 미리보기할 수 없는 소스 4. Main에서 사용하기 더보기 HTML 삽입 미리보기할 수 없는 소스

Tistory

[Spring Boot] ResponseEntity

ResponseEntity - 결과 데이터와 HTTP 상태 코드를 직접 제어할 수 있는 클래스 - ResponseEntity를 사용한 일관된 형식을 만들어서 return함으로써, API 개발이 편리해짐 HTML 삽입 미리보기할 수 없는 소스 - 상태 코드 : https://young0105.tistory.com/185 # ResponseEntity - 와일드 카드 ?를 사용함 → 상황에 따라 다른 타입을 리턴해야 할 때 사용할 수 있음

Tistory

[Spring Boot] AOP (관점 지향 프로그래밍)

AOP (Aspect Oriented Programming) - 프로그램을 구성하는 여러 모듈에서 공통적으로 사용하는 코드를 분리함 → 재사용성 & 유지보수성 향상 - 프로그램의 여러 지점에서 반복적으로 사용되는 기능을 모듈화함 → 코드 중복 감소 & 코드 가독성 향상 - 핵심적인 코드와 부가적인 코드(방어적 코드 등)를 분리함 : 핵심 기능에 영향을 미치지 않으면서, 부가적인 기능을 제공할 수 있음 - OOP (객체 지향 프로그래밍)의 보완(보조)적인 개념 # AOP 라이브러리 추가하기 (Gradle 빌드) 1. build.gradle 파일에 명시 HTML 삽입 미리보기할 수 없는 소스 2. build.gradle 파일 내 아무 곳이나 우클릭해서 메뉴 → [Gradle] → [Refresh Gradle..

Tistory

[Java] 옵저버 패턴 (Observer pattern)

옵저버 패턴 (Observer pattern, 콜백 메서드) - 한 객체의 상태가 변하면 그 객체에 의존하는 다른 객체들에게 통지되고, 자동으로 내용이 갱신됨 - 호출이 되면 돌아감 - 구현한 기능은 필요에 따라 가져와서 사용할 수 있게 됨 - 예시] Swing의 이벤트 리스너 : https://young0105.tistory.com/83 예제 코드 1. 인터페이스 선언 더보기 HTML 삽입 미리보기할 수 없는 소스 2. 인터페이스를 포함 관계로 갖는 클래스 생성 더보기 HTML 삽입 미리보기할 수 없는 소스 3. 옵저버 패턴 설계 및 사용하기 더보기 HTML 삽입 미리보기할 수 없는 소스

Tistory

[Spring Boot] Validation (유효성 검사)

Validation - 예외를 방지하기 위해 미리 검증하는 과정 (방어적 코드를 대신해서 사용할 수 있음) - 검증해야 할 값이 많은 경우 코드의 길이가 길어짐 → 횡단 관심사 (AOP 기반) : 핵심 기능과의 분리 - 흩어져 있는 경우 어디에서 검증하는지 알기 어려움 → 재사용에 대한 한계가 있음 - 검증 로직이 변경되는 경우, 참조하는 클래스에서 로직이 변경되어야 하는 부분이 발생할 수 있음 # Validation 라이브러리 추가하기 (Gradle 빌드) 1. build.gradle 파일에 명시 HTML 삽입 미리보기할 수 없는 소스 2. build.gradle 파일 내 아무 곳이나 우클릭해서 메뉴 → [Gradle] → [Refresh Gradle Project] 클릭 관련 어노테이션 어노테이션 설..

Tistory

[HTTP] 상태 코드

상태 코드 설명 1xx 요청을 제대로 받았고, 처리가 진행 중임 - 100 (Continue) 2xx 요청이 제대로 처리됨 - 200 (OK) : 성공 - 201 (Created) : 생성 or 수정 (POST or 일부 PUT 요청 이후) 3xx 요청을 처리하려면 클라이언트가 추가 동작을 취해야 함 - 302 (Fount) : 다른 URL로 갈 것 4xx 클라이언트가 잘못된 요청을 보내어 처리에 실패함 - 400 (Bad Request) : 요청이 문법에 맞지 않음 - 403 (Forbidden) : 클라이언트가 리소스를 요청할 권한이 없음 - 404 (Not Found) : 리소스가 없음 5xx 클라이언트의 요청은 유효하지만, 서버에 에러가 발생함 - 500 (Internal Server Error)..

Tistory

[Java] 싱글톤 패턴 (Singleton pattern)

# 관련 포스팅 - Static 키워드 : https://young0105.tistory.com/40 싱글톤 패턴 (Singleton pattern) - 모든 프로그램을 통틀어서, 해당 클래스의 객체가 단 한 개만 생성되어야 하는 경우 사용하는 디자인 패턴 - '생성' 디자인 패턴 - static 키워드를 활용하여 구현 가능 - 코딩 컨벤션 : 싱글톤 패턴을 구현하기 위한 메서드 이름은 'getInstance'를 자주 사용함 - 한 번 생성되면, 어떤 java 파일에서든 동일한 객체 하나만 공유하며 사용하게 됨 → 항상 같은 객체임을 보장함 // 예시 // public class Company { // 1. 생성자를 private으로 선언함 private Company() {} // 2. private,..

Tistory

[Spring Boot] MVC 패턴

MVC 패턴 (Model-View-Controller Pattern) - 사용자 인터페이스로부터 비즈니스 로직을 분리함 → 서로 간의 영향을 받지 않고 쉽게 수정할 수 있도록 하는 소프트웨어 디자인 패턴 - Spring 프레임워크는 MVC 패턴을 준수함 # 모델 (Model) - 애플리케이션이 무엇을 할 것인지를 정의하는 역할 - 내부 비즈니스 로직을 처리하기 위함 - 데이터를 가진 객체 (DTO) - 모델의 상태에 변화가 있을 때, 컨트롤러와 뷰에 이를 전달함 → 뷰는 최신의 결과를 보여주며, 컨트롤러는 모델의 변화에 따라 적용 가능한 명령을 수행할 수 있음 관련 어노테이션 HTML 삽입 미리보기할 수 없는 소스 # 뷰 (View) - 화면에 무엇인가를 보여주는 역할 - 모델/컨트롤러가 보여주려 하..

Tistory

[Spring Code] REST API - Controller 구현 예시

Method : GET # Query String 방식의 데이터 파싱 처리 더보기 HTML 삽입 미리보기할 수 없는 소스 # Path Variable 방식의 데이터 파싱 처리 더보기 HTML 삽입 미리보기할 수 없는 소스 Method : POST 더보기 HTML 삽입 미리보기할 수 없는 소스 Method : PUT 더보기 HTML 삽입 미리보기할 수 없는 소스 Method : DELETE 더보기 HTML 삽입 미리보기할 수 없는 소스

Tistory

[Spring Boot] IoC (제어의 역전) / DI (의존성 주입)

IoC (Inversion Of Control, 제어의 역전) - 객체(인스턴스)의 생명주기 관리를 개발자가 아닌 Spring Container (IoC Container)가 모두 맡아서 함 → 제어의 역전 (프로그램의 제어 흐름이 뒤바뀜) : 실행의 제어권이 개발자에서 Spring Boot 프레임워크로 넘어감 → 제어 흐름의 일부/전부를 프레임워크가 제어함 → 프로그램의 유연성 & 재사용성 향상 - 소프트웨어 디자인 패턴 - Spring Container에 올라간 Bean 객체들은 모두 싱글톤 패턴으로 관리됨 - Spring의 목표 : 내부적으로 Servlet Container를 가지고 있지만, 개발자가 그에 대해 신경쓰지 않고 Spring Container에 대해서만 관리하도록 함 # Bean 객체 ..

Tistory

[Java] 스트림 (Stream)

스트림 (Stream) - java.util.stream (IO 스트림과 다름) - 컬렉션과 배열에서 데이터를 처리하는 기능 제공 - 자료의 대상과 관계없이 동일한, 일관성 있는 연산을 수행함 ( == 자료 처리에 대한 추상화가 구현됨) → 자료의 처리를 쉽고 간단하게 함 - 한 번 생성하고 사용한 스트림은 재사용할 수 없음 : 자료에 대한 스트림을 생성하여 연산을 수행하고 나면 스트림은 소모됨 → 다른 연산을 수행하려면 스트림을 다시 생성해야 함 - 스트림 연산은 기존 자료를 변경하지 않고, 새롭게 생성하는 것 : 자료에 대한 스트림을 생성하면 스트림이 사용하는 메모리 공간이 별도로 생성됨 → 연산이 수행되어도 기존 자료에 대한 변경은 발생하지 않음 # 스트림 연산 1) 중간 연산 : 여러 개의 연산이..

Tistory

[Spring Boot] 개요

스프링 부트 (Spring Boot) - 자바 기반의 오픈 소스 프레임워크 - 스프링 기반 애플리케이션 개발을 단순화하고 빠르게 할 수 있게 만든 도구 # 특징 1) 개발 프로세스 간소화 - 자동 설정 - 내장 서버 : 따로 다운로드받지 않아도 사용 가능한 서버가 내장되어 있음 · 2.x.x 버전까지는 tomcat / 3.x.x 버전부터는 jetty - 의존성 관리 : 어떤 tool을 사용할지 기술하기만 하면 자동으로 HTTP 통신으로 받아옴 (기존처럼 따로 다운받아서 등록하지 않아도 됨) - 개발자들이 빠르게 프로젝트를 시작할 수 있게 도움 - 환경 설정 간소화 2) 관례에 따른 설정 원칙 - 개발자가 지정하지 않은 경우에도 기본 설정을 자동으로 적용 3) 독립 실행 가능한 애플리케이션 - 내장된 웹 ..

Tistory

[Spring Boot] 파라미터 전달 방식

쿼리 스트링 방식 (Query Parameter, Query String) - URL 뒤에 ?를 붙이고, 파라미터를 key-value 쌍으로 전달함 - 각 파라미터는 &로 구분됨 - 해당 파라미터의 key와 value는 =로 구분됨 - 브라우저의 캐시와 검색 엔진에서 높은 가중치를 부여함 ex) http://example.com/search?a=keyword&page=1 - 용이한 상황 : filtering, sorting, searching 경로 매개변수 방식 (Path Parameter, Path Variable) - URL 경로의 일부로 파라미터를 전달함 - {}로 변수를 감싸서, 변수 값이 들어갈 자리를 표시함 - RESTful API에서 사용됨 - URL 자체가 파라미터 정보를 전달함 ex) h..

1 2 3