이번주도 매우 바쁜 주였다.
게시판 구현까지 해봤으나 강의를 보면서 한 것이라 아직 완전히 내것이 아닌 거 같다. 나만의 것으로 만들때까지 열심히 코드 쳐봐야겠다.
다음주부터 토이프로젝트의 시작인데, 개인 과제까지 포함이라 매우 바쁜 주가 될 것 같다. 개인공부도 하면서 토이프로젝트 열심히 해봐야겠다.
이번 주엔 데코레이터 패턴과 프록시 패턴, 빌더 패턴을 직접 구현해보며 객체 생성과 확장의 유연함을 체득했다.
특히 데코레이터 패턴은 기능을 동적으로 추가하는 구조가 마음에 들었고, 실제 웹 애플리케이션에서 필터링, 인증, 로깅 등의 기능에 적합하다는 점도 배웠다.
=> 느낀점: 패턴은 외워서 쓰는 게 아니라, 문제를 해결하는 구조적 도구라는 걸 몸소 깨달음.
리스트, 맵, 스택, 큐 등을 배우고 책에 있는 예제코드를 따라치면서 이해해보려고 노력했다.
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());
}
Spring Controller 메서드 파라미터에 대해 조금더 알아보고 싶어서 수업내용 + α로 정리했다.
| 어노테이션 | 설명 |
|---|---|
| @RequestParam | 요청 파라미터 (?id=123) 를 변수에 바인딩 |
| @PathVariable | URL 경로 변수 (/users/{id}) 를 변수에 바인딩 |
| @RequestBody | HTTP 요청 body의 JSON/XML 등을 객체로 변환 |
| @ModelAttribute | form 데이터 또는 request parameter를 객체로 바인딩 |
| @RequestHeader | HTTP 요청 헤더 값을 가져옴 |
| @CookieValue | 쿠키 값을 가져옴 |
| @SessionAttribute | 세션에 저장된 값 주입 |
| @RequestAttribute | request.setAttribute() 로 설정된 값을 주입 (필터나 인터셉터 등에서) |
| HttpServletRequest | 서블릿 요청 객체를 직접 주입 |
| HttpServletResponse | 서블릿 응답 객체를 직접 주입 |
| HttpSession | 세션 객체를 직접 주입 |
| Principal | 인증된 사용자 정보를 담고 있는 java.security.Principal 주입 |
| @AuthenticationPrincipal | Spring Security에서 현재 인증된 사용자 객체 주입 |
@GetMapping("/hello")
public String hello(@RequestParam String name) { ... }
@GetMapping("/users/{id}")
public String getUser(@PathVariable Long id) { ... }
@PostMapping("/users")
public void saveUser(@RequestBody UserDto user) { ... }
@PostMapping("/register")
public String register(@ModelAttribute User user) { ... }
@GetMapping("/header")
public String getHeader(@RequestHeader("User-Agent") String userAgent) { ... }
@GetMapping("/cookie")
public String readCookie(@CookieValue("token") String token) { ... }
@GetMapping("/mypage")
public String myPage(@SessionAttribute("user") User user) { ... }
@GetMapping("/log")
public String log(@RequestAttribute("startTime") Long startTime) { ... }
public String userInfo(Principal principal) {
return principal.getName();
}
다음 주부터는 프로젝트 진행과정 및 매일 내 자신을 돌아보는 회고를 써야겠다.