47일차 - Controller 테스트
·
Java & Spring/Spring
1. 가짜 인증 처리(MockSpringSecurityFilter)코드 보기import jakarta.servlet.*;import jakarta.servlet.http.HttpServletRequest;import org.springframework.security.core.Authentication;import org.springframework.security.core.context.SecurityContextHolder;import java.io.IOException;public class MockSpringSecurityFilter implements Filter { @Override public void init(FilterConfig filterConfig) {} @Overr..
46일차 - 테스트 코드 애노테이션
·
Java & Spring/Spring
□ Before & After 테스트@BeforeEach : 각각의 테스트 코드가 실행되기 전@AfterEach : 각각의 테스트 코드가 실행된 후@BeforeAll : 모든 테스트 코드가 실행되기 전@AfterAll : 모든 테스트 코드가 실행된 후코드 보기public class BeforeAfterTest { @BeforeEach void setUp() { System.out.println("각각의 테스트 코드가 실행되기 전에 수행"); } @AfterEach void tearDown() { System.out.println("각각의 테스트 코드가 실행된 후에 수행\n"); } @BeforeAll static void beforeAl..
JWT 구현 및 사용
·
Java & Spring/Spring
1. build.gradle 의존성 추가implementation 'io.jsonwebtoken:jjwt-api:0.11.2'runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.2'runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.2' // JSON 처리 2. application.properties, secret key 추가jwt.secret.key=7Iqk7YyM66W07YOA7L2U65Sp7YG065+9U3ByaW5n6rCV7J2Y7Yqc7YSw7LWc7JuQ67mI7J6F64uI64ukLg== - JWT 토큰 생성3. JwtUtil 생성코드 보기import io.jsonwebtoken.Claims;import io.jsonwebtoken..
37일차 - Spring강의(JPA Audting)
·
Java & Spring/Spring
JPA Auding : 시간에 대해서 자동으로 값을 넣어주는 기능@Getter@MappedSuperclass@EntityListeners(AuditingEntityListener.class)public abstract class Timestamped { @CreatedDate @Column(updatable = false) @Temporal(TemporalType.TIMESTAMP) private LocalDateTime createdAt; @LastModifiedDate @Column @Temporal(TemporalType.TIMESTAMP) private LocalDateTime modifiedAt;}@MappedSuperclassJPA Entity 클래스..
31일차 - Spring강의(Entity 연관 관계)
·
Java & Spring/Spring
□ 1 대 1 관계(@OneToOne)▷ 단방향 관계외래 키 주인 정하기 : 1대1 관계에서는 외래 키 주인을 직접 지정해야한다.외래 키의 주인만 외래 키를 등록, 수정, 삭제 할 수 있다.주인이 아닌 쪽은 읽기만 가능하다.- 음식 Entity가 외래 키의 주인인 경우- 음식 Entity 코드코드 보기@Entity@Table(name = "food")public class Food { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private double price; @OneToOne @JoinColumn(name = "user_id") p..
29일차 - Spring강의(인증과 인가)
·
Java & Spring/Spring
□ 인증과 인과인증(Authenication)해당 유저가 실제 유저인지 인증하는 개념지문인식, 로그인 등인가(Authorization)해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 개념관리자 페이지, 관리자 권한 등서버와 클라이언트는 http라는 프로토콜을 이용하여 통신하는데 그 통신은 비연결성(Connectionless) 무상태(Stateless)로이루어진다.비연결성(Connectionless) : 서버와 클라이언트가 연결되어 있지 않다는 것, 이유는 리소스 절약을 위해서무상태(Stateless) : 서버가 클라이언트의 상태를 저장하지 않는다는 것□ 인증의 방식쿠키-세션 방식쿠키 : 클라이언트에 저장될 목저으로 생성한 정보를 담은 파일세션서버에서 일정시간동안 클라이언트 상태를 유지하기 위해..
28일차 - Spring강의(Bean 수동 등록, Type중복 시 Bean 주입)
·
Java & Spring/Spring
□ Bean 수동 등록@Component를 사용하면 자동으로 해당 클래스를 Bean으로 등록해줌기술적인 문제나 공통적인 관심사를 처리할 때 사용하는 객체들을 수동으로 등록공통 로그처리와 같은 비즈니스 로직을 지원하기 위한 부가적이고 공통적인 기능들을 '기술지원 Bean'이라 부르고 수동등록 함수동 등록된 Bean에서 문제가 발생 했을 때 해당 위치를 파악하기 쉬운 장점이있음@Configurationpublic class PasswordConfig { @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }}Bean으로 등록하고자 하는 객체를 반환하는 메서드를 선언그 매서드 위에 ..
26일차 - Spring강의(Entity, 영속성 컨텍스트)
·
Java & Spring/Spring
□ EntityJPA에서 관리되는 클래스 객체를 의미Entity 클래스는 DB테이블과 매핑되어 JPA에 의해 관리됨@Entity // JPA가 관리할 수 있는 Entity 클래스 지정@Table(name = "memo") // 매핑할 테이블의 이름을 지정public class Memo { @Id private Long id; // nullable: null 허용 여부 // unique: 중복 허용 여부 (false 일때 중복 허용) @Column(name = "username", nullable = false, unique = true) private String username; // length: 컬럼 길이 지정 @Column(name = "contents"..
25일차 - Spring강의(IoC와 DI)
·
Java & Spring/Spring
□ 좋은 코드란논리가 간단해야 한다.중복을 제거하고 표현을 명확하게 한다.처음 보는 사람도 쉽게 이해하고 수정할 수 있어야 한다.의존성을 최소화해야 한다.새오룬 기능을 추가 하더라도 크게 구조의 변경이 없어야 한다.※ 의존성이란?코드 보기public class Consumer { void eat() { Chicken chicken = new Chicken(); chicken.eat(); } public static void main(String[] args) { Consumer consumer = new Consumer(); consumer.eat(); }}class Chicken { public void eat() { ..
25일차 - Spring강의(3 Layer Architecture)
·
Java & Spring/Spring
□ 3 Layer ArchitectureController클라이언트의 요청을 받음요청에 대한 로직 처리는 Service에게 전담Service에서 처리 완료된 결과를 클라이언트에게 응답Service사용자의 요구사항을 처리(비즈니스 로직)하는 실세DB저장 및 조회가 필요할 때는 Repository에게 요청RepositoryDB관리(연결, 해제, 자원관리)DB CRUD작업을 처리□ Controller에서 Service분리해보기- 분리 전(Controller)코드 보기@PostMapping("/memos")public MemoResponseDto createMemo(@RequestBody MemoRequestDto requestDto) { // RequestDto -> Entity Memo memo ..