전체 글 Spring Data Jpa의 LazyInitializationException과 OSIV 2020. 9. 9. Spring Data Jpa로 프로젝트를 진행하면서 LazyInitializationException을 겪었었다. LazyInitializationException은 영속성 컨텍스트에 있던 Entity가 준영속(Detached) 상태가 됐을 때 Lazy Loading을 실행해서 영속성 컨텍스트에서 해당 객체를 조회해오려고 했을 때 발생하는 예외이다. 김영한님의 Tacademy JPA 강의 정리하며 공부했기 때문에 당황하지 않고 원인을 금방 파악할 수 있었다. 프로젝트를 진행할 당시에는 해당 Entity에서 불필요한 객체를 조회해오지 않는 로직이라 Fetch Join으로 문제를 해결했었다. 그리고 Hibernate.initialize() 메서드 등 다른 방법으로도 LazyInitializationExcep.. Java Collections Framework 2020. 9. 4. Set Set 인터페이스의 구현체들은 내부적으로 Map 인터페이스의 구현체들을 사용한다. HashSet은 내부적으로 HashMap을 사용하고 TreeSet은 TreeMap, LinkedHashSet은 LinkedHashMap을 사용한다. Map인터페이스의 key만 사용하고 value는 항상 같은 Dummy값을 넣어두고 사용하지 않는다. 이러한 특징은 Set 인터페이스에 get() 메서드가 없는 것과도 관련 있는데 Map 인터페이스 자체에는 getKey() 메서드가 없다. 그러므로 Set에서도 get() 메서드를 사용하는게 구조적으로 불가능한 것이다. 사실 Set은 순서와 상관없이 중복되지 않는 데이터를 저장할 목적으로 만들어지고 여러 데이터를 넣어두고 해당 데이터가 존재하는지 확인하는 용도로 많이 사용한.. 자바 반복문 알고 쓰자! 2020. 9. 1. javable에 업로드 된 제 글을 옮겨온 글입니다. 😊 반복문은 어떤 프로그래밍을 하든 기본 중의 기본이다. 우리는 처음 자바 문법 배울 때를 제외하고 반복문에 대해 다시 공부해본 적이 있는가? 있다면 이 글은 넘겨도 좋다. 다만 가장 빈번하게 사용하는 반복문을 너무 가볍게 여겨서는 안 된다. 이 글을 통해 반복문을 조금 더 알고 써보자. for for문은 반복문 중에 가장 자주 쓰인다. 나를 포함한 대부분의 초보 개발자들이 가지고 있는 for문을 작성하는 안 좋은 습관이 있다. 아래의 코드에서 한 번 찾아보자. public void example(List numbers) { for (int i = 0; i < numbers.size(); i++) { ... } } 위 코드는 매번 반복하면서 numbe.. Logback, Error 로그 Slack 알림 받기 2020. 8. 25. 팀 프로젝트에서 Logback 라이브러리로 로그를 관리한다. 기존에는 slf4j로 로그를 찍으면 EC2 인스턴스의 log파일에 저장하는 방식으로 설정해뒀었다. 이렇게 로그 관리를 하니 문제점이 많았다. 서비스를 운영하면서 error가 터질 때마다 ec2 인스턴스에 직접 접근해서 log파일을 뒤져야하는 번거로운 과정을 거쳐야했다. 또 실시간으로 error를 빨리 확인할 수 없었다. 매번 서비스가 터진 걸 모르고있다가 팀원 중 누군가 우연히 들어갔을 때 서비스가 터졌음을 확인했다. 그럼 인스턴스에 접근해서 log파일을 뒤져서 왜 에러가 났는지 확인하고, 고치고.. 이런 과정을 반복했다. 이러한 문제점을 해결하기 위해 Error가 터지면, 실시간으로 Error 로그를 Slack 메신저로 알림을 받는 환경을 구.. @Mock vs @MockBean 2020. 8. 14. MockMvc로 테스트를 하다가 @Mock과 @MockBean의 차이가 뭔지 궁금해졌다. 비슷하게 생긴 두 어노테이션은 엄연히 용도가 다르다. 간단하게 정리해보자. @Mock 어노테이션 단어 그대로 Mock 객체, 즉 가짜 객체로 쓰겠다는 뜻이다. @ExtendWith(MockitoExtension.class) class ServiceTest { private Service service; @Mock private Repository Repository; @BeforeEach void setUp() { service = new Service(repository); } @Test void findAll() { given(repository.findAll()).willReturn(...); List actu.. MockMvc VS RestAssured 2020. 8. 14. javable에 업로드 된 제 글을 옮겨온 글입니다. 😊 MockMvc와 RestAssured는 우리가 애플리케이션을 개발할 때 테스트를 편리하게 할 수 있게 해주는 유용한 테스트 도구이다. 이 두 가지 도구는 비슷하면서도 다르다. 상황에 맞게 적절한 테스트 도구를 활용할 수 있도록 눈에 띄는 몇 가지 차이점을 정리하고자 한다. 어느 것이 더 좋다는 정답은 없다. 사용 목적 MockMvc는 웹 애플리케이션을 애플리케이션 서버에 배포하지 않고도 스프링 MVC의 동작을 재현할 수 있는 라이브러리이며 대부분 Controller Layer Unit Test(단위 테스트)에 사용된다. 실제 서버 환경과 동일한 @SpringBootTest를 사용할 필요가 없으므로 @WebMvcTest를 통해 Presentation.. JVM(Java Virtual Machine) 2020. 8. 10. 역할 자바 애플리케이션을 클래스 로더를 통해 읽어들여서 자바 API와 함께 실행 Java와 OS 사시의 중재자 역할 -> Wirte Once Run AnyWhere 메모리 관리, Garbage Collection을 수행 한정된 메모리를 효율적으로 활용하기 위해 JVM 메모리 구조를 알아야 한다. JVM은 JRE에 포함되어 있다. java 프로그램 실행 과정 프로그램이 실행되면 JVM은 OS로부터 메모리를 할당 받는다. JVM은 이 메모리를 용도에 따라 여러 구역으로 나누어 관리 자바 컴파일러(javac)가 자바 소스코드(.java)를 읽어들여 자바 바이트코드(.class)로 변환 Class Loader를 통해 class파일들을 JVM으로 로딩 로딩된 class파일들은 Execution engine을 통해.. 함께 자라기(애자일로 가는 길) 2020. 8. 4. 함께 자라기 책을 읽었다. 읽으면서 공감도 많이 되고, 인사이트를 많이 얻을 수 있어서 오랜만에 매우 재밌게 읽었다. 다시 한 번 볼 예정이지만 처음 읽었을 때 인상 깊었던 내용과 생각을 정리해두고자 한다. 자신이 이미 갖고 있는 것들을 잘 활용하라. 새로운 것을 유입시키는 데에만 집중하다 보면 새로 들어온 것들이 이미 있는 것들을 덮어버릴 수 있다. 이미 갖고 있는 것들을 하이퍼링크로 서로 촘촘히 연결하라. 레벨 2때 새로운 지식들이 머리에 너무 많이 들어왔었다. 책에서 말하듯이 새로운 지식이 2주 전, 3주 전 내가 학습한 지식들을 덮는 듯 했다. 그런 경험을 했기에 더 인상깊었던 내용이었다. 더 새로운 지식을 향해 나아가는 것도 좋지만, 기존의 지식을 정리하고 실험하며 깊게 학습하는 것이 나에겐 더.. 이전 1 ··· 4 5 6 7 8 9 10 ··· 31 다음