springboot 7

[Spring-Boot] @Controller vs @RestContoller 차이점

Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller와 @RestController가 있다. 이번에는 이 2가지 어노테이션의 차이점에 대해 정리해보겠다. 주요 차이점은 @ResponseBody가 생성되는 방식. 즉, @Controller + @ResponseBody 조합 = @RestContoller 이다. @Controller 전통적인 Spring MVC의 컨트롤러 어노테이션인 @Controller는 주로 View(화면)를 반환하기 위해 사용됨. 아래와 같은 요청으로 view를 반환하게 됨. Client는 URL 형식으로 요청을 보냄. DispatcherServlet이 요청을 위임할 Handler Mapping을 찾음. Handler Mapping을 통해 해당 요청을 받는 Con..

Spring-Boot 2024.01.23

[Spring-Boot] 테스트케이스의 @Transactional

스프링부트로 통합 테스트를 하던 중 통합테스트를 해보았다. 간단한 테스트 코드를 보자. memberService.join(member) 호출해서 실제로 데이터베이스를 select를 해보면 테스트 코드에서 테스트용으로 생성한 member 객체의 name인 'hello'가 반영이 된걸 볼 수 있다. 하지만, 테스트 코드의 의미와 다르게 실제 데이터베이스에 적용이 되는게 좀 이상하지않은가? 그렇다. 사실 우리가 테스트하는 데이터들은 실제 디비에 반영이 되지않고 테스트 내에서만 검증을 하고 마쳐야하고, 반복적인 테스트에도 예외가 없어야한다 여기서 만약에 한번 더 가입 테스트를 실행해보면 예상과 같이 이렇게 빨간 불이 뜨면서 내가 미리 선언해둔 '이미 존재하는 회원' 이라는 예외로 넘어가게 된다. 우리가 테스트를..

Spring-Boot 2024.01.12

[Spring] @Configuration과 싱글톤, 바이트 코드 조작

싱글톤 패턴을 학습 한 후 소스코드를 보던 중에 이 코드를 한번 자세히 보자. 현재 memberService(), orderService()는 memberRepository()를 호출하고 있다. 자바 코드에 의해서, memberRepository()가 호출되면서 return new MemoryRepository()를 실행하게 된다. 그러면 여기서 잠깐, 싱글톤은 하나의 객체만 생성되어야하고, 공유를 해야하는 것인데.. 자바 코드로만 보면 객체 생성을 2번하고 있는 것 같다... 과연 내가 호출할 때마다 memberRepository()가 계속 생성 되는 것이 사실인지 테스트 코드를 통해 알아보자. 각각 memberServiceImpl(), orderServiceImpl()에 테스트를 위해 생성한 mem..

Spring 2024.01.06

[Spring] 싱글톤 패턴이란

김영한 스프링 강의를 듣던 중 싱글톤패턴의 개념이 나왔다. 싱글톤 패턴이란 객체(인스턴스)가 현재 JVM 안에 단 하나만 존재해야한다라는 것이다. 싱글톤패턴이 왜 생겼는가? 스프링의 탄생부터 알아보자 스프링은 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. 대부분의 스프링 애플리케이션은 웹 애플리케이션이고, 물론 웹이 아닌 애플리케이션도 얼마든지 개발할 수 있다. 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 그림을 통해 예를 들어보자 우리가 만들어둔 AppConfig(DI 컨테이너)가 있다고 가정하자. 클라이언트 A,B,C가 스프링한테 memberService를 요청하면, DI 컨테이너 안에서 요청 건수마다 new를 통해 객체를 생성해서 반환하게 된다. 웹 애플리케이션 특성 상 고객이 ..

Spring 2024.01.05

ORM이란?

어플리케이션의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 의미한다 - java의 데이트 클래스와 관계형 데이터베이스의 테이블을 매핑 객제치향 프로그래밍과 관계형 데이터베이스의 차이로 발생하는 제약 사항을 해결해주는 역할 수행 대표적으로 JPA, Hibernate등이 있음 ORM의 장점 1. SQL 쿼리가 아닌 직관적인 코드로 데이터를 조작할 수 있다 2. 재사용 및 유지보수가 편리하다 3. DBMS에 대한 종속성이 줄어듬 ORM의 단점 1. 복잡성이 커질 경우 ORM만으로 구현하기 어려움 - 직접 쿼리를 구현하지않아 복잡한 설계가 어렵다 2. 대형 쿼리는 별도의 튜닝이 필요할 수 있음 JPA란? JPA는 Java Persistance API의 줄임말이며, ORM과 관련된 인터페이스의 ..

Spring-Boot 2023.10.25

스프링 시큐리티(Spring Security)

스프링 시큐리티란? 스프링 기반의 애플리케이션 보안(인증, 인가, 권한)을 담당하는 스프링 하위 프레임워크이다. 인증과 인가 인증(Authentication)은 사용자의 신원을 입증하는 과정이다. 예를 들어 사용자가 사이트에 로그인을 할 때 누구인지 확인하는 과정을 인증이라고 한다. 인가(Authorization)는 인증과는 다르다. 인가는 사이트의 특정 부분에 접근할 수 있는지에 권한을 확인하는 작업이다. 예를 들어 관리자는 관리자 페이지에 들어갈 수 있지만 일반 사용자는 관리자 페이지에 들어갈 수 없다. 이런 권한을 확인하는 과정을 인가라고 한다. 인증과 인가 관련 코드를 아무런 도구의 도움 없이 작성하려면 굉장히 많은 시간이 필요하다. 스프링 시큐리티를 사용하면 아주 쉽게 처리를 할 수 있다. 스프..

Spring-Boot 2023.07.15

스프링 부트란?

스프링 부트? 스프링? 스프링을 더 쉽게 만들어주는 스프링 부트! 스프링은 장점이 많은 도구이지만 설정이 매우 복잡하다는 단점이 있다. 스프링 개발팀에서도 이런 단점을 인식하고 단점을 보완하고자 스프링 부트를 출시했다. 의존성세트라고 불리는 스타터를 사용하여 간편하게 의존성을 사용하거나 만들어주는 도구이다. 스프링부트의 주요 특징 톰캣, 제티, 언더토우 같은 웹 어플리케이션 서버(web application server, WAS)가 내장되어 있어서 따로 설치를 하지 않아도 독립적으로 실행할 수 있다. 빌드 구성을 단순화하는 스프링 부트 스타터를 제공한다. XML 설정을 하지않고 자바 코드만으로 모두 작성할 수 있다. JAR를 이용해서 자바 옵션만으로도 배포가 가능하다 스프링 스프링 부트 목적 엔터프라이즈..

Spring-Boot 2023.07.08