전체 글
-
[intelliJ] 놀라운 단축키 모음Java 2023. 1. 5. 16:25
멀티커서 위아랫줄 찍기 : opt 두번연타(두번째 누르고 있기) + 방향키 위/아래 중간 글자 대문자로 변경하기 : cmd + shift + u 멀티커서 찍기 : shift + opt + 더블클릭 멀티커서 위치 찍기 : shift + opt + 클릭 동일한 단어 차근차근 멀티커서에 담기 : ctrl + g 입력값을 매개변수로 만들고 가져오기 : cmd + opt + p // 변경 전 ("kim"에 커서를 대고 단축키 입력!) public void test(){ Member member = new Member("kim"); } // 변경 후 public void test(String name){ Member member = new Member(name); } 특정 코드를 새 메서드로 뽑아내기 : cmd +..
-
[SPRING] 서버 실행 시 더미데이터를 생성해보장!Spring Boot 2023. 1. 2. 13:01
게시글 조회 API 하나를 테스트 해보기 위해 서버를 실행하고 매번 '회원가입 -> 로그인 -> 게시글작성'을 실행해보는 것도 굉장히 번거로운 일이다. 이럴 때 더미데이터로 미리 계정과 게시글을 다 만들어놓는다면 얼마나 편리할까? 알고보면 더미데이터를 적용하는 것은 매우 쉽다. @Component public class InitData implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { ... // 실행할 코드 } } 클래스에 ApplicationRunner 인터페이스를 적용하면 run 메서드를 오버라이드하라는 경고가 뜬다. run 메서드를 오버라이딩하여 안에 실행할 코드를..
-
[SPRING] AOP를 사용해보장Spring Boot 2023. 1. 1. 22:15
업무 로직을 포함하는 비즈니스 로직을 핵심 기능(Core Concerns)라고 부르고, 핵심 기능을 도와주는 부가적인 기능을 부가기능(Cross-cutting Concerns)이라고 부른다. AOP란? 로직을 짤 때 기능을 핵심기능과 부가기능으로 분리해서 관리한다면 더할 나위 없이 좋을 것이다. 이때 AOP는 핵심기능에서 부가기능을 애스팩트(Aspect)라는 모듈 형태로 만들어서 더 설계적으로 분리할 수 있게 도와준다. 애스펙트(Aspect)란? Advice + PointCut = Aspect 애스펙트는 부가기능을 정의한 코드인 어드바이스(Advice)와 어드바이스를 어디에 적용하지를 결정하는 포인트컷(PointCut)을 합친 개념이다. AOP 개념을 적용하면 핵심기능 코드 사이에서 부가기능을 독립적인 ..
-
[SPRING] 테스트코드 어노테이션, 라이브러리, 메서드 모음Spring Boot 2022. 12. 28. 18:07
포스트맨도 있는데 왜 굳이 테스트코드를 써야할까? 회원가입, 로그인을 한 뒤에 api를 수행하는 일을 하지 않을 수 있다. 예외 상황(ex. 게시물 id 중복, 게시물 찾을수 없음, 올바른 값 전달 안함)를 하나하나 테스트할 때 매 번 포스트맨에서 값을 바꿔가며 실행시켜볼 필요가 없다. 여러가지 예외 상황을 테스트코드에 정리할 수 있다. 어노테이션 @RunWith(SpringRunner.class) Junit 실행할 때 스프링이랑 같이 엮어서 실행하겠다고 선언한다. @SpringBootTest 스프링부트를 띄운 상태로 테스트한다. 이게 없으면 스프링의 애노테이션인 @Autowired 이런 것들이 다 실패한다. @Transactional DB에 추가/수정/삭제 등 변경될 때는 이걸 넣어준다. 테스트코드에서..
-
☑️[SPRING] 양방향 연관관계일 때 연관관계 편의 메서드를 만들어보장Spring Boot 2022. 12. 27. 10:42
@Entity @Table(name="orders") @Getter @Setter public class Order { @Id @GeneratedValue @Column(name = "order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @OneToMany(mappedBy = "order") private List orderItems = new ArrayList(); @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "delivery_id") private Delivery delivery; private ..
-
[SPRING] 스프링시큐리티(Spring Security)를 사용해보장Spring Boot 2022. 12. 23. 11:23
Maven Dependency org.springframework.boot spring-boot-starter-security Gradle Dependency implementation 'org.springframework.boot:spring-boot-starter-security' 어노테이션 @Configuration 설정 컴포넌트라고 선언한다. @EnableWebSecurity 스프링 시큐리티 지원을 가능하게 한다. 이걸 설정 객체에 붙혀주면 SpringSecurityFilterChain에 등록된다. @AuthenticationPrincipal 매개변수에 선언한다. 이게 붙은 매개변수는 SecurityContextHolder에 저장된 인증 객체(Authentication 객체)의 principal ..