- PYTHON
- ORM
- jpa
- spring mvc
- 1차원 배열
- SSL
- session
- Docker
- @transactional
- springboot
- string
- Git
- java
- 자바
- spring boot
- join
- nginx
- 문자열
- 스프링
- DI
- select
- spring security 6
- Django
- 프로그래머스
- spring
- sql
- 데이터베이스
- 스프링부트
- AWS
- mysql
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
목록Java/Spring (55)
개발하는 자몽
H2 인메모리 DB를 사용하면 알아서 스키마를 초기화하지만, 별도의 DB를 사용하면 초기화하지 않는다. 따라서 application.properties에 관련 설정을 작성해야 한다. Hibernate 전략 spring.jpa.generate-ddl 애플리케이션 시작 시 스키마 초기화 여부를 지정하며 기본값은 false다. spring.jpa.hibernate.ddl-auto DB 초기화 전략 옵션이다. none : DDL 핸들링 작업을 수행하지 않는다. create : 기존에 존재하는 스키마를 삭제(drop)하고 새로 생성한다. create-drop : 스키마를 생성하고 애플리케이션이 종료될 때 삭제(drop)한다. update : 기존의 스키마를 유지하며 JPA에 의해 변경된 부분만 추가한다. vali..
JdbcTemplate을 아주 간단하게 소개하려고 한다. 이전 포스트에서 JDBC 사용으로 인하여 발생하는 코드 중복 문제가 남아있다고 했었다. JdbcTemplate을 사용하면 해당 문제가 해결된다. JdbcTemplate (Spring Framework 5.3.23 API) 스프링에서 제공하는 JdbcTemplate은 JDBC 사용으로 생기는 중복을 없애주며 코드를 단순화한다. 해당 클래스는 SQL 쿼리나 업데이트를 실행하여 ResultSet 인스턴스에 대한 반복을 실행하고, JDBC의 예외를 잡아서 데이터 접근 계층(org.springframework.dao 패키지에 정의된 예외 계층) 예외로 변환시켜준다. Note JdbcTemplate 인스턴스는 한번 설정하면 Thread-Safe 하다. //D..
이 글은 인프런 김영한 님의 강의를 바탕으로 작성한 글입니다. Service 계층은 비즈니스 로직에만 집중해야 한다. Repository에서 발생한 DB 오류로 인해 Service 단에서 DB 관련 의존관계를 갖지 않도록 체크 예외를 언체크 예외(런타임 예외)로 변환하여 던졌다. 체크 예외, 언체크 예외 이 글은 김영한 님의 "스프링 DB 1편 - 데이터 접근 핵심 원리" 강의에 기반하여 쓰였습니다. 스프링이 제공하는 예외 추상화를 이해하기 위해서는 자바 기본 예외에 대한 이해가 필요하다. 자바 backend-jaamong.tistory.com 체크 예외를 런타임 예외로 변환하기 위해 개발자가 일일이 처리하기에는 데이터 접근 계층이 수백 개인 경우 큰 문제가 된다. 이 부분을 스프링이 해결해 준다. 스프..
김영한 님 인강을 보다가 나온 @SpringBootTest, @TestConfiguration 애노테이션에 대해 간단하게 정리하려고 한다. @SpringBootTest 스프링 AOP를 적용하려면 스프링 컨테이너가 필요하다. 이 애노테이션이 있으면 테스트 시 스프링 부트를 통해 스프링 컨테이너를 생성한다. 테스트에서 @Autowired 등을 통해 스프링 컨테이너가 관리하는 빈들을 사용할 수 있다. @TestConfiguration 테스트 안에서 내부 설정 클래스를 만들어서 사용하면서 이 애노테이션을 붙이면, 스프링 부트가 자동으로 만들어주는 Bean들에 추가로 필요한 스프링 빈들을 등록하고 테스트를 수행할 수 있다. @SpringBootTest //스프링 띄움 -> 필요한 스프링 빈 등록, 의존관계 주입 ..
@Transactional 애노테이션은 스프링이 제공하는 트랜잭션 AOP이다. @Transactional 애노테이션은 메서드와 클래드에 붙일 수 있다. 클래스에 붙이면 외부에서 호출 가능한 public 메서드가 AOP 적용 대상이 된다. @Transactional 애노테이션 하나만 선언해서 편리하게 트랜잭션을 적용하는 것을 선언적 트랜잭션 관리(Declarative Transaction Management)라고 한다. 선언적 트랜잭션 관리는 해당 로직에 트랜잭션을 적용하겠다고 어딘가에 선언하기만 하면 트랜잭션이 적용되는 방식이다. 참고 스프링 AOP를 적용하려면 어드바이저, 포인트컷, 어드바이스가 필요하다. 스프링은 트랜잭션 AOP 처리를 위해 다음 클래스를 제공한다. 스프링 부트를 사용하면 해당 빈들은..
Model과 @ModelAttribute에 대해서 정리가 필요한 것 같아서 글을 쓴다. Model Model은 객체다. HashMap 형태로 Controller에서 view에 필요한 데이터를 key, value로 넣어준다. key는 객체의 이름(view의 이름), value는 객체를 담는다. 넣어진 값은 view의 이름과 view를 렌더링 할 때 필요하다. Servlet의 request.setAttribute()와 비슷한 역할을 한다.(둘은 똑같지 않다. https://velog.io/@dbsrud9126/Spring-Model.addAttribute-vs-Request.setAttribute) @PostMapping("/add") public void add(@RequestParam String nam..
공부하면서 뷰 템플릿, 템플릿 엔진이 정확히 무엇인지 정리되지 않아서 글을 남긴다. 뷰 템플릿(View template)은 간단하게 HTML을 편리하게 생성하는 기능으로 일반적으로 HTML을 동적으로 생성하는 용도로 사용한다. 대표적으로 JSP와 Thymeleaf가 있으며, JSP보다는 Thymeleaf가 많이 사용된다. 모델(model) : 뷰에 출력할 데이터를 담아둔다. 뷰(view) : 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일(HTML을 생성하는 부분, 렌더링)에 집중한다. 템플릿 엔진(Template Engine)은 템플릿 양식과 특정 데이터 모델에 따른 입력 자료를 합성하여 결과 문서를 출력하는 소프트웨어 또는 소프트웨어 컴포넌트를 말한다. 템플릿 엔진의 정의를 검색했을 때 이렇게 나..
프록시는 어떤 객체를 사용하려고 할 때 해당 객체에 직접 요청하는 것이 아닌 중간에 가짜 프록시 객체(대리인)를 둔다. 이 프록시 객체가 대신 요청을 받고 실제 객체를 호출한다. 프록시 모드를 설정하면 의존성 주입을 통해 주입되는 빈은 실제 빈이 아닌 해당 빈을 상속받은 프록시 객체이다. 스프링은 CGLIB 라이브러리(Byte Code Generation Library)를 사용하여 프록시 객체를 주입한다. 프록시 객체 내부에는 실제 빈을 요청하는 로직이 들어있다. 클라이언트의 요청이 들어오는 시점에 실제 빈을 호출한다. → 실제 빈의 조회를 필요 시점까지 지연 프록시 객체는 실제 객체를 상속받아서 만들어지므로 클라이언트 입장에서는 실제 빈을 사용하는 것과 동일한 방법으로 사용하면 된다. @Scope의 p..
빈을 찾기 위한 다양한 의존성 검색 방법 스프링 빈 스코프를 공부하다가 의존성 주입(DI)뿐만 아니라 의존성을 갖는 빈을 검색 (DL, Depndency Lookup)할 때도 있다는 것을 알게 되었다. 스코프가 prototype이거나 request인 경우가 대표적이다. Spring은 빈을 검색하기 위한 다양한 방법들을 제공한다. @Scope("prototype") //또는 @Scope("request") public class UserRequest { ... } 1. ApplicationContext 스프링은 DI 컨테이너인 ApplicationContext를 관리하고 있다. 그래서 ApplicationContext를 통해 필요한 빈을 검색할 수 있다. @Service @RequiredArgsConstr..
수동 빈 등록과 의존관계 주입 @Bean 애노테이션은 method-level로 수동으로 빈을 등록할 때 사용한다. 메서드가 선언된 클래스 상단에는 @Configuration 애노테이션을 붙여 설정 정보 클래스임을 알려주고, 싱글톤이 깨지지 않도록 한다. (@Configuration을 붙이지 않아도 @Bean을 붙이면 다 빈으로 동록 되지만 싱글톤이 깨진다.) /* 수동 빈 등록 및 의존관계 주입 @Configuration, @Bean */ package hello.core; ... @Configuration public class AppConfig { @Bean public MemberService memberService() { //memberService에 의존관계로 memberRepository 주..