본문 바로가기
반응형

분류 전체보기108

PathVariable, RequestParam, RequestBody(스프링에서 파라미터 받기) 스프링 컨트롤러에서 파라미터를 전달받을 때 사용하는 객체로는 PathVariable, RequestParam, RequestBody가 있습니다. 이번 글에서는 각각의 쓰임을 간단히 알아보겠습니다. ✅ @PathVariable PathVariable로 파라미터를 받을 경우의 간단한 URI 예시를 보겠습니다. http://localhost:8080/order/10 해당 URL 요청을 @PathVariable을 사용해 처리하려면 다음과 같은 컨트롤러가 필요합니다. @PostMapping("/order/{number}") public String(@PathVariable Integer number) { //... 중략 } 위와 같이 URI를 구성할 때 '리소스'만으로 요청 정보를 다 넘겨줄 수 없을 때 @Pat.. 2022. 7. 12.
세션 저장소로 데이터베이스 사용하기(MySQL) 현재 프로젝트에서 로그인 방식으로 세션을 사용하고 있습니다. 쿠키의 경우 클라이언트의 리소스를 사용하기 때문에 서버의 부하가 적으나 웹 브라우저마다 지원 형태도 다르고 보안에 취약해서 사용하지 않았습니다. 세션을 사용하여 로컬 환경에서 프로젝트를 진행할 때, 수정사항이 생겨 애플리케이션을 재시작해야 하는 경우 세션이 만료되어 다시 로그인을 했어야 했습니다. 이는 세션이 기본적으로 톰캣 세션을 사용하기 때문입니다. ✅ 세션 저장소 세션은 쿠키와 다르게 서버의 리소스를 사용합니다. 때문에 세션을 만들면 서버에서 관리되는 것이죠. 이런 세션을 저장하는 저장소로 보통 3가지 방식이 사용됩니다. ☝ 톰캣 세션 따로 설정을 하지 않은 경우 기본적으로 톰캣에 세션이 저장됩니다. 앞서 말했듯이, 애플리케이션을 재구동 .. 2022. 7. 12.
프로젝트를 더욱 S.O.L.I.D 하게 수정해보기 SOLID는 다음 5가지 원칙을 말합니다. SRP : 단일 책임 원칙(Single Responsibility Principle) OCP : 개방 폐쇄 원칙(Open Closed Principle) LSP : 리스코프 치환 원칙(Liskov Substitution Principle) ISP : 인터페이스 분리 원칙(Interface Segregation Principle) DIP : 의존관계 역전 원칙(Dependency Inversion Principle) 따라서 SOLID하게 라는 말이 맞지는 않지만 견고하게 만든다는 뜻에서 한번 사용해봤습니다 😅 오늘 수정해볼 부분은 Service 클래스와 그 구현체들을 SOLID 원칙, 특히 SRP 원칙에 맞춰 리팩토링 하는 시간을 가져보려고 합니다. ✅ 단일 책임.. 2022. 7. 12.
나는 ServiceImpl을 잘 활용했는가? ✅ 나는 ServiceImpl을 잘 활용했는가? 스프링 프로젝트를 진행할 때 비즈니스 계층(Business Layer)에서 Service 클래스를 만들어 사용했다. 이때 서비스 클래스는 1. Service Interface 2. Service Interface 구현 객체 로 나뉜다. 실제 내가 진행했던 프로젝트의 패키지이다. 모든 서비스 클래스는 인터페이스와 그 구현 객체로 나뉜다. 관습적으로 서비스 클래스를 '구현'과 '역할'로 나누어 설계한 점도 있지만 나누게 된 나름의 목표는 있었다. 우선 자바의 다형성을 살리는 것이 하나의 목표였다. 클래스를 설계하면서 때에 따라 필요한 인터페이스만을 가져와서 컨트롤러단의 코드를 깔끔하게 하면서 여러 부품을 필요할 때마다 갈아 끼우듯 코딩하는 것이 1차 목표였다... 2022. 7. 11.
프로젝트를 마무리 하며(블로그에 소홀했다) ㅠ.ㅠ 프로젝트를 마무리하는 과정에서 무중단 배포를 도입하려고 했는데 그 과정이 생각보다 너무 길어졌다. 중간에 '포기할까? 포기하자!'라는 생각을 진짜 몇 번을 했는지 모르겠는데 포기하면 그 정도 수준에서 내가 멈춰버릴 것 같아서 포기하지 않는 것을 목표로 시도해서 결국 성공했다ㅜ 서버가 중간 중간 다운된다거나, 문제가 없는데 400번대 오류가 뜬다거나 자잘한 오류가 가끔 발생하는데, 그럴 때마다 거대한 웹 페이지를 운영하는 모든 사이트들에게 경외감이 든다. ㅎㅎ.. 여태까지 블로그는 공부하다가 모르는 게 생기거나 공부한 내용을 정리하고 싶을 때 글을 작성했는데, 프로젝트를 하다 보니, 내가 여태까지 써온 글이 양질의 글이 아니라는 생각을 했다. 실제 이론에 맞춰 프로젝트에 적용하는 것은 또 다른 문제였고, .. 2022. 7. 11.
스프링 MVC와 계층형 아키텍처(Layered Architecture) 스프링 프로젝트를 시작하기 앞서 프로젝트를 구조화하기 위해서 아키텍처를 정해야 했다. 내가 선택했던 아키텍처는 '계층형 아키텍처(Layered Architecture)'이다. 계층형 아키텍처를 적용하기로 했던 프로젝트는 DB로 MySQL을 사용하고, Mybatis를 추가로 사용했다. 이 점이 계층형 아키텍처랑 잘 어울리는 부분이라고 생각했다. 우선 간단한 계층형 아키텍처의 모습을 보자 ✅ 계층형 아키텍처(Layered Architecture) 클라이언트의 HTTP 요청이 오면 1차적으로 컨트롤러가 응답한다. 이후 'Service Layer'와 'Model'로 요청이 흐르는데 여기서 Service Layer는 스프링에서 서비스 클래스와 같고, Model은 데이터 접근 객체(dto, entity)와 같다. .. 2022. 7. 11.
반응형