목록전체 글 (153)
늘
스프링이 관리할 객체를 어떻게 지정할까? @ComponenetScan이 하위 클래스들을 쭉 훑으면서 @Component로 설정된 빈들을 자바 빈으로 관리하도록 설정한다. 어떤 객체를 스프링이 관리해야할지? 의존성이 있다면 스프링이 관리해주는게 좋다고 생각한다! 스프링이 의존성을 관리해주기 때문이다. 계속 의존성이 연결되는걸 스프링의 빈이 관리해주니 편하다. 예를 들면, spring-boot-starter-jdbc: 의존성을 추가하고 jdbcTemplate을 빈에서 불러오는데 빈으로 의존성이있는 20개 정도가 있다. 이처럼 무수히 많은 의존성들을 스프링이 관리해주기떄문에 좋다. 경험으로는 spark web에서 spring으로 전환하니깐 의존성관리를 해줘서 엄청 편했다! 빈으로 등록하면 자동으로 가져와서 사..
단방향 해시 함수(one-way hash function)의 다이제스트(digest) 보통 단방향 해시 함수는 수학적인 연산을 통해 원본 메시지를 변환하여 암호화된 메시지인 다이제스트를 생성한다. 원본 메시를 안다 -> 암호화된 메시지를 알 수 있다. 암호화된 메시지를 안다 -> 원본 메시지를 모른다. 한쪽으로만 알 수 있으므로 이와 같은 처리를 '단방향성'이라고 한다. 단방향 해시 함수는 예를 들어 비밀번호가 asd일 때, 해시 알고리즘인 SHA-256을 이용하여 암호화할 때, f52bvs32c2f3f86kk88vc6c490628285a482af15ascb19541d54saz526a3f6c7 와 같이 나온다면 asd1을 암호화하면 fb8c2e2b85ca81eb4350199faddd983cb26af306..
Spring REST Docs는 테스트가 통과해야 문서화가 된다. API문서 자동화에는 대표적으로 swagger와 Rest docs가 있는데 개인적으로 RestDocs를 선호한다. 장점 Spring REST Docs는 테스트가 성공하지 않으면 문서를 만들 수 없습니다. 즉, 반 강제로 테스트를 해야 하고 이를 통해 신뢰도 높은 api문서가 나온다. 실제 코드에 추가되는 코드가 없습니다. - swagger를 보면 프로덕션 코드에 어노테이션이 덕지덕지 붙어있는데, 이는 관심사의 분리가 실패된 케이스가 아닌가.. 라는 생각이 들어서 RestDocs를 선호한다. 커스터마이징 가능 문서화에 사용할 테스트 도구 여기서 API문서화 할때는 Controller테스트를 통해서 생성하므로 RestAssured보다는 Moc..
uniq 중복된 문자열을 제거한다. 이때 정렬된 문자열에서 중복되어야만 제거가 된다. 즉, sort | uniq는 거의 세트라고 생각해도 될 것 같다. history 지금까지 사용했던 명령어들을 보여준다. ex) history | grep 'docker' : 이전에 사용했던 docker가 포함된 명령어들 출력 출력된 히스토리 번호 앞에 !를 붙여주면 바로 명령어 사용이 가능하다. & 보통 build/libs에 jar파일이 생성되는데 해당 디렉토리에서 아래와 같이 명령어를 실행해주면 서버에서 jar파일을 돌릴 수 있다. 이때 뒤에 &는 백그라운드로 실행하겠다는 명령어이다. jobs 터미널에서 백그라운드 작업 확인이 가능하다. fg%{jobs번호} fg %1을 통해서 1번 백그라운드 작업을 포워그라운드로 다..
@Mock @ExtendWith(MockitoExtension.class)를 클래스 위에 붙여준다. @ExtendWith(MockitoExtension.class) public class MockTests { @Mock private OrderRepository orderRepository; @InjectMocks private OrderService orderService; } @InjectMocks를 사용하면 @Mock으로 만들어진 인스턴스들을 자동으로 주입해준다. (위 예시에서는 OrderService가 OrderRepository를 주입받는 클래스 존재) @MockBean @SpringBootTest public class MockTests { @MockBean private OrderReposi..
데코레이터 패턴 위와 같이 요금을 측정하는데, 나이와 거리에 따라 요금을 측정한다고 하자. 이때 나이와 거리의 조합에 따라서 요금이 결정된다고 생각했고 데코레이터 패턴을 적용해봤다. public interface Fare { double calculateExtraFare(); } 요금이 계산되는 메서드를 추가해준다. BaseFare public class BaseFare implements Fare{ private final int extraFare; public BaseFare(final int extraFare) { this.extraFare = extraFare; } @Override public double calculateExtraFare() { return extraFare + 1250; } ..
빈이 생성된 이후 추가로 호출되는 콜백들이 있는데요. Spring bean lifecycle, Spring bean hook 같은 키워드로 검색해보시면 도움이 될 것 같아요! 저번에 테스트 격리에 대해 학습하면서 토미가 키워드를 주셨는데, 오늘은 이 키워드를 정리해보려고 한다. 빈 생성 IoC컨테이너가 만들어진다. -> ComponentScan을 통해 빈으로 등록할 객체들을 찾는다. IoC 컨테이너 안에 빈을 등록한다. 그리고 의존관계 주입을 하기 전에 준비 단계가 있다. 이 준비 단계에서 객체 생성이 일어난다. 생성자 주입: 객체의 생성, 의존관계 주입이 동시에 일어남 setter, Field 주입: 객체의 생성 -> 의존관계 주입으로 라이프 사이클이 나누어져 있음 스프링 의존관계 주입이 완료된 시점 ..
Reflection API란? 구체적인 클래스 타입을 알지 못해도 그 클래스의 정보(메서드, 타입, 변수 등등)에 접근할 수 있게 해주는 자바 API다. 사용하는 Library, Framework, API, Feature Jackson, GSON 등의 JSON Serialization Library Log4 j2, Logback 등의 Logging Framework Apache Commons BeanUtils 등의 Class Verification API Spring의 @Autorwired와 같은 DL, DI 기능 (: processInject(), inject() Method ) Spring Contatiner의 BeanFactory에서 사용 내부적으로 Spring의 ReflectionUtils라는 A..
서블릿을 만들려면 HttpServlet 클래스를 상속받으면 되나? - 서블릿 프로그래밍의 핵심은 Servlet 인터페이스를 이해해야 한다. 서블릿 웹 브라우저 웹 서버 웹 애플리케이션에서 웹서버와 웹 애플리케이션 사이에서 CGI규칙에 따라 데이터를 주고받는다. 자바로 만든 CGI 프로그램을 서블릿이라고 부른다. 서블릿 컨테이너(톰캣) 이런 서블릿의 생성, 실행, 소멸 등 생성 주기를 관리하는 프로그램을 서블릿 컨테이너라고 한다. 서블릿은 한 번 생성되면 웹 애플리케이션을 종료할 때까지 유지한다. 서블릿 컨테이너가 서블릿을 대신하여 CGI 규칙에 따라 웹 서버와 데이터를 주고받는다. 따라서 개발자는 더 이상 CGI규칙에 대해서 알 필요가 없다. 대신 서블릿 컨테이너와 서블릿 사이의 규칙을 알아야 한다. 서..
1. Transactional(readOnly = true)효과 1.성능상에 이점 readOnly일 경우 트랜잭션 ID를 부여하지 않아 조금의 성능 향상이 있다. 2.안전성 읽기가 아닌 수정하는 동작이 발생하면 TransientDataAccessResourceException 예외를 발생하여 변경을 막아줄 수 있습니다. 그런데 디비에 따라 다르고 Mysql은 위처럼 발생하지만 h2 인메모리 디비에서는 예외가 발생하지 않는다고 한다. 3. 가독성 readOnly가 붙은 메서드는 모두 조회 메서드라는 것을 한 눈에 파악할수 있다는게 장점이다. 예를 들어 프로그램이 커지면 수많은 메서드들이 존재할텐데 그중에서 조회 로직을 수정해야한다면, readOnly가 달린 메서드들만 빠르게 찾아 수정할수 있다는 장점이 있..