[커널아카데미] 백엔드 12기 11주차 회고

david1-p·2025년 6월 8일

회고

목록 보기
11/27

  이번주도 매우 바쁜 주였다.
  게시판 구현까지 해봤으나 강의를 보면서 한 것이라 아직 완전히 내것이 아닌 거 같다. 나만의 것으로 만들때까지 열심히 코드 쳐봐야겠다.
  다음주부터 토이프로젝트의 시작인데, 개인 과제까지 포함이라 매우 바쁜 주가 될 것 같다. 개인공부도 하면서 토이프로젝트 열심히 해봐야겠다.

이번 주 공부한 내용!

1. 디자인패턴 적용한 코드 구현

  이번 주엔 데코레이터 패턴과 프록시 패턴, 빌더 패턴을 직접 구현해보며 객체 생성과 확장의 유연함을 체득했다.
특히 데코레이터 패턴은 기능을 동적으로 추가하는 구조가 마음에 들었고, 실제 웹 애플리케이션에서 필터링, 인증, 로깅 등의 기능에 적합하다는 점도 배웠다.

  • 데코레이터 패턴으로 출력 포맷을 동적으로 추가
  • 프록시 패턴으로 트랜잭션 제어 구현
  • 빌더 패턴으로 복잡한 객체 생성 간소화

=> 느낀점: 패턴은 외워서 쓰는 게 아니라, 문제를 해결하는 구조적 도구라는 걸 몸소 깨달음.

2. 자료구조 응용

리스트, 맵, 스택, 큐 등을 배우고 책에 있는 예제코드를 따라치면서 이해해보려고 노력했다.
HashMap의 entrySet(), ListIterator, subList() 등 다양한 메서드를 직접 사용해보면서 성능 및 편의성을 익혔다.

List<String> sub = list.subList(0, 3);
for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println(entry.getKey() + "=" + entry.getValue());
}

3. Spring Controller 메서드 파라미터 주입 방식 총정리

Spring Controller 메서드 파라미터에 대해 조금더 알아보고 싶어서 수업내용 + α로 정리했다.

어노테이션설명
@RequestParam요청 파라미터 (?id=123) 를 변수에 바인딩
@PathVariableURL 경로 변수 (/users/{id}) 를 변수에 바인딩
@RequestBodyHTTP 요청 body의 JSON/XML 등을 객체로 변환
@ModelAttributeform 데이터 또는 request parameter를 객체로 바인딩
@RequestHeaderHTTP 요청 헤더 값을 가져옴
@CookieValue쿠키 값을 가져옴
@SessionAttribute세션에 저장된 값 주입
@RequestAttributerequest.setAttribute() 로 설정된 값을 주입 (필터나 인터셉터 등에서)
HttpServletRequest서블릿 요청 객체를 직접 주입
HttpServletResponse서블릿 응답 객체를 직접 주입
HttpSession세션 객체를 직접 주입
Principal인증된 사용자 정보를 담고 있는 java.security.Principal 주입
@AuthenticationPrincipalSpring Security에서 현재 인증된 사용자 객체 주입
  1. @RequestParam
  • GET이나 POST의 파라미터 (?name=david)를 단일 값이나 리스트, Optional 등으로 받을 수 있다.
  • 예:
@GetMapping("/hello")
public String hello(@RequestParam String name) { ... }

  1. @PathVariable
  • URL 경로에서 값을 추출
@GetMapping("/users/{id}")
public String getUser(@PathVariable Long id) { ... }

  1. @RequestBody
  • JSON 같은 body 데이터를 객체로 매핑
@PostMapping("/users")
public void saveUser(@RequestBody UserDto user) { ... }

  1. @ModelAttribute
  • 파라미터를 객체로 바인딩할 때 사용. 폼 데이터 처리에 많이 씀.
@PostMapping("/register")
public String register(@ModelAttribute User user) { ... }

  1. @RequestHeader
  • 요청 헤더 값을 읽어올 수 있음.
@GetMapping("/header")
public String getHeader(@RequestHeader("User-Agent") String userAgent) { ... }

  1. @CookieValue
  • 쿠키 값을 읽어올 수 있음.
@GetMapping("/cookie")
public String readCookie(@CookieValue("token") String token) { ... }

  1. @SessionAttribute
  • 세션에 저장된 값을 컨트롤러에서 주입받을 수 있음.
@GetMapping("/mypage")
public String myPage(@SessionAttribute("user") User user) { ... }

  1. @RequestAttribute
  • 필터나 인터셉터에서 setAttribute()한 값을 가져올 수 있어.
@GetMapping("/log")
public String log(@RequestAttribute("startTime") Long startTime) { ... }

  1. Principal, @AuthenticationPrincipal (Spring Security)
  • 로그인 사용자 정보를 주입할 수 있어.
public String userInfo(Principal principal) {
    return principal.getName();
}

다음 주부터는 프로젝트 진행과정 및 매일 내 자신을 돌아보는 회고를 써야겠다.

profile
DONE IS BETTER THAN PERFECT.

0개의 댓글