분류 전체보기 95

[IntelliJ] 인텔리제이 단축키 만들기

강의를 보다가 sout같은 단축키를 사용하는 것을 보고 따라 쳤는데 안되는 경우가 있다. 알고보니 따로 만들어서 사용할 수 있는 것을 알았다. 나는 아래 코드를 'tdd' 라는 단축키로 만들었다. @Test public void () throws Exception { //given //when //then } Settings -> Live Templates -> Java에 만들고 맨 아래 Change라고 쓰여있는 곳에 Java를 체크했다. 업무를 하면서 많이 쓰이는 것들은 따로 단축키를 만들어 쓰면 편할 것 같다.

그 외 개념,팁 2024.03.25

AOP 관점 지향 프로그래밍

AOP (Aspect Oriented Programming) 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나눠보고 그 관점을 기준으로 각각 모듈화 하겠다는 의미 '쉽게 말해 공통적으로 기능들에 로그를 남기거나 보안관련 검사를 하는 것들'을 한 곳에서 한 번에 관리할 수 있는 방법론이다. 이를 통해 코드의 중복을 줄이고 유지보수가 용이해진다. 예를 들어 내가 필요한 클래스의 메서드만 골라 동작하는 시간을 측정할 수 있다. @Aspect // Aop로 쓸 때 쓰는 어노테이션 @Component // 써도 되지만 SpringConfig에 @Bean으로 등록해서 씀 public class TimeTraceAop { @Around("execution(* hello.hellospring..*(..))")..

CS지식 쌓기 2024.03.06

[SpringBoot] Junit - @SpringBootTest, @Transactional 어노테이션

@SpringBootTest 스프링 컨테이너와 테스트를 함께 실행한다 @Transactional 테스트할 때 DB에 반영된 것들을 테스트가 끝나면 rollback 해주어 DB에 데이터가 남지 않으므로 다음 테스트에 영향을 주지 않는다. 테스트 파일을 만들 경우 스프링 컨테이너 없이 '단위테스트'를 하는 것이 좋은 테스트라고 한다. MemberServiceTest 같은 경우는 단위테스트 class MemberServiceTest { MemberService memberService; MemoryMemberRepository memberRepository; @BeforeEach public void beforeEach(){ memberRepository = new MemoryMemberRepository()..

[Spring Boot] DI (의존성 주입, Dependency Injection)

DI는 코드 간의 의존 관계를 관리하기 위한 디자인 패턴이다. 회원관리를 예를 들어 설명을 하자면, MemoryMemberRepository에는 기본적인 기능 (가입, 전체조회, ID로 검색, Name으로 검색 등등) MemberService에는 그 외에 비즈니스적인 기능(부가적인 기능)을 작성한다고 한다. 부가적인 기능을 이용할 때는 기본적인 기능을 이용할 때가 많다. 예를 들면 기본적인 기능에는 회원 정보가 저장되는 기능이 있다면 부가적인 기능에는 사용자가 입력한 내용이 중복확인이나 조건을 거쳐 모든 조건에 충족이 된다면 회원정보가 저장되는 기능이 작동하는 것이다. 회원 정보가 저장되는 기본적인 기능 @Override public Member save(Member member) { member.set..

[Spring Boot] Junit 사용해보기

테스트를 하다가 이런 에러가 발생했다. package hello.hellospring.repository; import hello.hellospring.domain.Member; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import java.util.List; import static org.assertj.core.api.Assertions.*; class MemoryMemberRepositoryTest { MemoryMemberRepository repository = new MemoryMemberRepository(); @Test public void save(){ Member member = new Memb..

[JPA] Mysql JPA 테이블 추가하기

전에 했던 내용을 복습하기 위해 Member 테이블을 하나 더 생성했다 persistence.xml 파일에 jpabasic.reserve.domain.Member 를 추가했다. jpabasic.reserve.domain.User jpabasic.reserve.domain.Member true 테이블과 일치하게 VO도 추가하여 작성했다 package jpabasic.reserve.domain; import jakarta.persistence.*; import java.time.LocalDateTime; @Entity @Table(name = "member") public class Member { @Id private String email; private String name; @Column(name =..

[Spring boot] 스프링 컨테이너 - response 하는 방법

웹이 동작하는 순서 1. 서버가 켜지면서 web.xml이 호출됨 2. ContextLoaderListener가 호출됨 (성이 만들어짐) 3. applicationContext.xml, root-context.xml이 읽어지면서 DB관련 객체들 메모리에 올림 (service, DAO, VO등) 4. 사용자의 request요청이 들어옴 5. DispatcherServlet이 웹과 관련된 것들을 메모리에 띄움(주소분배) 6. response 응답이 감 (Data or html) 1. 요청 주소에 따른 적절한 컨트롤러 요청 (handler Mapping) GET 요청 -> http://localhost:8080/post/2 해당 주소 요청이 오면 주소에 맞는 적절한 컨트롤러의 함수를 찾아서 실행한다. 2. 응답..

[Spring boot] 스프링 컨테이너 - request 과정

request -> web.xml -> ContextLoaderListener ->DispatchServlet(컴포넌트 스캔 > 주소 분배) ContextLoaderListener - 모든 자원들이 공통적으로 사용할 것들을 만들어둠 ex)DBConnector - 어노테이션(ex -@Controller, @Restcontroller, @Configration 등)을 가지고 있는 것들을 모두 메모리에 띄움 - 어노테이션을 커스텀 할 수도 있음 servlet-applicationContext - controllers, viewResolver, HandlerMapping를 메모리에 띄우고 관리함 - 웹만 바라보는 어노테이션을 스캔하고 ContextLoaderListener에 의해 실행됨 root-applicat..