서론
5월 4주차 (10주차) - (05/19 - 05/25)
지난 주의 지필평가와 프로젝트에서의 결과가 만족스럽지 않았습니다.
남은 커리큘럼 과정에서 좋은 결과를 낼 수 있도록 마음가짐을 다시 하며 회고록을 썼습니다.
1. 내용정리
[Servlet]
서블릿이란 클라이언트의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술
- 일반적으로 서블릿은 서블릿 컨테이너(Servlet Container)에서 관리
- 흐름 : 네트워크 통신 서비스 사용자 -> 클라이언트(client) 서비스 제공자 -> 서버(server)
- 역할 : 서버와 클라이언트 간의 request(요청)와 response(응답)
Get요청과 Post요청 ★
doGet :
- URL에 쿼리 문자열을 포함해 데이터를 전달하기 때문에 노출이 쉽지 않고 민감한 정보를 다룰 떄 적절
- 요청이 캐싱될 수 있어 성능 면에서 동일한 데이터를 여러 번 요청하는 경우에 효율적
- URL에 데이터를 포함하여 일반적으로 2000자 정도까지 안정적
- ex) 검색 결과 페이지, 페이지 간 네비게이션, API 요청에서 간단한 데이터 조회
doPost :
- HTTP 바디에 데이터를 포함하기 떄문에 상대적으로 보안이 강하여 중요한 정보를 보낼 때 사용
- 캐싱되지 않으며, 매번 새로운 데이터를 처리하여 중요한 데이터 변경이 필요한 경우에 적합
- ex) 로그인 정보 입력 후 처리, 데이터 추가 및 수정 요청, 파일 업로드 기능
foward방식과 redirect방식 ★
foward :
- URL이 변경되지 않으며, 하나의 요청으로 처리
- 새로고침 시 이전데이터를 가져오기 때문에 물어봄 (그래서 redirect로 끊어줌)
- 주로 내부 페이지 이동 또는 데이터를 유지해야 할 때 사용
redirect :
- 기존에 있던 정보를 끊고 새 데이터를 연결해줄 때 사용
- request와 response가 유지되지 않고 URL이 변경되며, 두 개의 Request가 발생
- 주로 삽입, 수정, 삭제 기능 또는 새로운 페이지 이동에 사용 (폼 제출 후 중복 제출을 방지하고 새로운 페이지로 이동할 때)
Cookie와 Session
- 쿠키는 사용자의 선호, 로그인 상태 등을 기억하여 사용자 경험을 개선하기 위해 사용
- 쿠키는 클라이언트(브라우저)에서 저장해 사용자가 직접 수정 가능
- 쿠키는 문자열 데이터만 저장 가능 (JSON으로 직렬화하여 사용 가능)
- 세션은 서버 측에서 사용자 정보를 저장하는 방식으로 서버는 각 클라이언트에 고유 세션 ID를 할당
- 세션 브라우저 당 한 개의 고유 아이디를 가지고 하나의 인스턴스를 이용
- 세션은 서버에서 관리하므로 상대적으로 안전하고 많은 데이터 저장 가능
Filter, Wrapper, Listener, JSP
- Filter는 요청을 가로채어 특정 로직을 수행 / 서버가 필터를 사용해 요청을 가로채는 방식으로 동작 (유사한 방식으로 interceptor가 있음)
- Wrapper는 기존 ServletRequest, ServletResponse 등의 관련 클래스 객체를 감싸는 역할을 수행
- Wrapper는 웹 애플리케이션에서 요청(request)과 응답(response)의 전처리 및 후처리 작업을 수행하는 중요한 역할 (암호화나 데이터 변환 등)
- Listener는 웹 애플리케이션에서 특정 이벤트가 발생했을 때 이를 감지하고 필요한 작업을 수행하는 역할 (ContextListener, SessionListener, RequestListener)
- JSP는 Servlet과 반대로 HTML코드에 Java 코드를 삽입하며 화면 로직 처리에 적합
<% 자바코드 %>
[SpringCore]
스프링의 요청 처리 흐름
- 사용자가 브라우저에서 특정 링크(URL)로 요청을 보냄
- 톰캣 서버가 요청을 받아 WEB-INF/web.xml 파일을 참조하여 어떤 서블릿이 처리할지 결정
- DispatcherServlet이 요청을 넘겨받아 처리할 컨트롤러를 찾음
- DispatcherServlet은 관련 컨트롤러 Bean을 생성하거나 조회함
- 해당 요청을 처리할 적절한 컨트롤러 메서드를 찾기 위해 RequestMappingHandlerMapping을 이용해 매핑 정보를 검색
- RequestMappingHandlerAdapter에게 요청을 위임하여 컨트롤러 메서드를 실행하고, 결과를 ModelAndView 객체로 반환받음
- ViewResolver가 뷰(View)를 찾아 렌더링할 힌트를 제공하며, 최종적으로 모델과 뷰를 조합하여 사용자에게 응답 화면을 반환
의존성 주입 (DI, Dependency Injection)
- 클래스 내부에서 직접 다른 객체를 생성하는 대신, 외부에서 필요한 객체를 전달받아 사용하는 방식
- IOC Container(제어의 역전)는 생명주기 관리 책임을 개발자 대신 컨테이너가 담당하는 개념
- web.xml을 이용한 서블릿 등록은 로직과 설정을 명확하게 분리할 수 있어 가독성에 좋음
- 매핑과 어노테이션 기반 서블릿 매핑(@WebServlet)은 코드 기반 관리가 가능하고 에노테이션만으로 간결하게 사용할 수 있어 유지보수에 용이
di-annotation
- @Getter @Setter @ToString @AllArgsConstructor : 생성자 어노테이션
- @Component : 가장 기본적인 컴포넌트 등록 어노테이션
- @Repository : 데이터 액세스 객체(DAO) 역할을 하는 클래스에 붙여서 데이터 처리를 담당
- @Service : 비즈니스 로직을 처리하는 서비스 클래스에 사용
- @Controller : 웹 요청을 받아 처리하는 컨트롤러 역할을 수행
- @Autowired: 자동으로 빈을 주입하는 어노테이션으로, 생성자, 필드, 메서드에 적용 가능
- @Configuration: 설정 클래스를 정의할 때 사용
- @Bean :
- Scope관리 (Singleton, Prototype)
- Dependency Injection (의존성 주입)
- Lifecycle관리 (초기화 및 소멸 등)
- Bean Post Processing (AOP, Proxy 적용 등)
- 이름을 별도로 지정하지 않으면 메소드 이름이 자동으로 Bean의 id로 인식
2. 지필평가 (오답노트)
05/19 : 지필평가
> 지필평가 결과
5월부터 배운 교육 과정(HTML, CSS, 자바스크립트, 리액트) 4지선다 문제로 100점 만점 중 60점 합격에 못미치는 결과가 나왔습니다. 그리고 재시험으로 60점으로 커트라인으로 통과했습니다.
그런 이유로 오답노트를 작성하며 복기했습니다.
> 오답노트
[meta태그]
- meta태그는 웹페이지의 정보(metadata)를 정의하는 태그지만, CSS 스타일을 정의하지 않음
- 스타일을 적용하려면 CSS를 활용해야 하며, 이를 style태그 안에서 정의하거나
link 태그를 통해 외부 CSS파일을 연결하는 올바른 방식
[CSS 속성]
- background-color이고 bg-color는 존재하지 않는 속성
[margin과 padding]
- margin은 요소의 바깥 여백을 설정하는 속성, padding은 요소 내부의 여백을 설정하는 속성
[section vs div]
- section은 문서의 독립적인 주제별 구획을 나눌 때 사용
- div는 순전히 스타일링 및 레이아웃을 위한 그룹화 역할
[선택자 우선순위 정리 (내림차순)]
- 인라인 스타일 (style) : 가장 높은 우선순위
- !important : 특정 스타일을 강제로 적용
- ID 선택자 (#id) : 클래스보다 높은 우선순위
- 클래스 선택자(.class) : 태그 선택자보다 높은 우선순위
- 태그 선택자 (div, p, h1등) : 가장 낮은 우선순위
[let, const 그리고 var]
- var는 옛날 방식(재선언 가능, 값 변경 가능, 호이스팅 적용되지만 초기화되지 않음
- let은 블록 스코프를 가짐, 재선언 불가능, 값 변경 가능
[클로저, 프로토타입, this바인딩 (자바스크립트 핵심)]
- 클로저는 내부 함수가 외부 함수의 변수에 접근할 수 있는 개념
함수가 실행될 때 그 함수가 선언된 환경(스코프)의 변수를 기억하고 계속 사용하기 위함
- 모든 객체는 프로토타입을 가지고,
프로토타입을 사용하면 객체가 다른 객체의 기능을 상속
프로토타입 체인을 통해 객체는 부모 객체의 속성과 메서드를 검색
- this바인딩은 어떤 객체를 참조하는지를 결정하는 규칙
함수, 객체, 생성자 호출 및 화살표 함수마다 가리키는 대상이 다름
call, apply, bind를 사용하면 원하는 객체로 직접 설정 가능
[use strict]
- 성능을 직접적으로 향상시켜주는 것이 아님
- 엄격한 규칙을 적용하여 코드의 오류를 방지하여 안전한 코딩을 유도하는 역할을 함
3. 마무리
> 좋았던 점과 아쉬웠던 점
매일 적절한 운동에 스트레스 해소에 도움이 되는 것 같습니다.
지나치게 ChatGPT나 듣기만 하는 학습에서, 조금 더 자기주도적인 학습이 필요한 것 같습니다.
> 개선할 점
예습과 복습을 우선적으로 하는 것이 좋을 것 같고, 나머지 시간을 활용하여 다른 공부를 하도록 하겠습니다.
그리고 프레임워크에서 코드를 작성하며 Get요청과 Post요청, foward방식과 redirect방식을 언제 사용해야 할지 이해가 필요해 보입니다.
> 다음주 계획
주요 커리큘럼 과정인만큼 최대한 포커싱을 하겠습니다.
커리큘럼 : 스프링 프레임워크 (스프링 부트)
05/26 : PCCE 코딩테스트
05/31 : SQLD 자격증 시험