- java
- nginx
- 자바
- sql
- Docker
- select
- string
- PYTHON
- session
- Django
- DI
- mysql
- spring security 6
- 데이터베이스
- springboot
- 1차원 배열
- Git
- SSL
- 스프링부트
- @transactional
- AWS
- 문자열
- spring boot
- spring mvc
- spring
- jpa
- 프로그래머스
- 스프링
- ORM
- join
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 (80)
개발하는 자몽
UserDetailsService UserSecurityService는 스프링 시큐리티 설정에 등록할 클래스이다. 이 클래스는 스프링 시큐리티 로그인 처리의 핵심 부분이다. @RequiredArgsConstructor @Service public class UserSecurityService implements UserDetailsService { private final UserRepository userRepository; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { Optional userOptional = userRepository.findByUsername(use..
BCryptPasswordEncoder는 BCrypt 해싱함수(BCrypt Hashing Function)를 사용해서 비밀번호를 암호화(encode)한다. 아래 코드는 값을 받아서 사용자를 생성한다. 이때 비밀번호는 BCryptPasswordEncoder를 사용하여 암호화하고 DB에 저장한다. @RequiredArgsConstructor @Service public class UserService { private final UserRepository userRepository; public SiteUser create(String username, String email, String password) { BCryptPasswordEncoder encoder = new BCryptPasswordEnco..
@EnableWebSecurity? @EnableWebSecurity는 URL이 스프링 시큐리티의 제어를 받도록 만드는 어노테이션이다. @EnableWebSecurity 어노테이션을 사용하면 내부적으로 SpringSecurityFilterChain이 동작하여 URL 필터가 적용된다. 스프링 시큐리티의 세부 설정은 SecurityFilterChain 빈을 생성하여 설정할 수 있다. 공식문서에서는 아래와 같이 설명하고 있다. Add this annotation to an @Configuration class to have the Spring Security configuration defined in any WebSecurityConfigurer or more likely by exposing a Secur..
예를 들어 질문 게시판을 구현한다고 하자. 그렇다면 질문 엔티티와 답변 엔티티가 필요하다. 이때 고려해야 할 점은 매핑 관계이다. 하나의 질문에는 여러 개의 답변이 달릴 수 있고, 하나의 답변은 여러 개의 질문에 달릴 수 있다. 답변 엔티티 입장에서 질문 엔티티와의 매핑 관계 → 1 : N 질문 엔티티 입장에서 답변 엔티티와의 매핑 관계 → N : 1 이를 위한 어노테이션으로 @ManyToOne과 @OneToMany를 사용할 수 있다. 해당 어노테이션을 사용하면 실제 데이터베이스에서는 ForeignKey(FK) 관계가 생성된다. (@ManyToOne은 부모 자식 관계를 갖는 구조에서 사용한다. 여기서 부모는 질문, 자식은 답변이라고 할 수 있다.) 질문 엔티티 - Question.java @Getter ..
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 처리를 위해 다음 클래스를 제공한다. 스프링 부트를 사용하면 해당 빈들은..
이 글은 김영한 님의 "스프링 DB 1편 - 데이터 접근 핵심 원리" 강의에 기반하여 쓰였습니다. 스프링이 제공하는 예외 추상화를 이해하기 위해서는 자바 기본 예외에 대한 이해가 필요하다. 자바의 모든 객체의 최상위 부모는 object이다. 따라서 예외의 최상위 부모도 object이다. Throwable은 최상위 예외로 하위에 Exception과 Error가 있다. Error는 애플리케이션에서 복구가 불가능한 시스템 예외로 애플리케이션 개발자는 이 예외를 잡으려고 해서는 안된다. 상위 예외를 catch로 잡으면 그 하위 예외까지 함께 잡는다. 따라서 애플리케이션 로직에서는 Throwable 예외도 잡으면 안 되는데, Error 예외도 함께 잡을 수 있기 때문이다. 애플리케이션 로직은 이러한 이유로 Exc..