[플레이데이터 풀스택 백엔드 9기] 5월 4주차 회고 (10주차)

FerryLa·2025년 5월 26일

서론

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]

스프링의 요청 처리 흐름

  1. 사용자가 브라우저에서 특정 링크(URL)로 요청을 보냄
  2. 톰캣 서버가 요청을 받아 WEB-INF/web.xml 파일을 참조하여 어떤 서블릿이 처리할지 결정
  3. DispatcherServlet이 요청을 넘겨받아 처리할 컨트롤러를 찾음
  4. DispatcherServlet은 관련 컨트롤러 Bean을 생성하거나 조회함
  5. 해당 요청을 처리할 적절한 컨트롤러 메서드를 찾기 위해 RequestMappingHandlerMapping을 이용해 매핑 정보를 검색
  6. RequestMappingHandlerAdapter에게 요청을 위임하여 컨트롤러 메서드를 실행하고, 결과를 ModelAndView 객체로 반환받음
  7. 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 자격증 시험

profile
김지환

0개의 댓글