전체보기

    @BeforeAll과 @Mock

    @BeforeAll과 @Mock

    최근 테스트를 학습하면서 기존에 진행했던 프로젝트에 테스트 코드를 작성하고 있었는데, 이 과정에서 @BeforeAll과 @Mock을 동시에 사용하며 문제가 발생했고, 이 문제가 왜 발생했는 지, 어떻게 해결했는 지를 중점으로 글을 작성하려고 한다!@BeforeAll테스트 코드를 작성하다 보면 테스트 수행 전에 초기 설정이 필요하거..

    스프링 트랜잭션

    목차 1. 트랜잭션 동기화 2. 트랜잭션 추상화 3. 선언적 트랜잭션 🤔 스프링 트랜잭션 스프링은 트랜잭션 동기화, 트랜잭션 추상화, 선언적 트랜잭션을 지원한다 우리가 자주 사용하는 @Transactional 어노테이션이 바로 선언적 트랙잭션이다 트랜잭션 동기화 먼저 기존에는 트랜잭션 동기화가 어떻게 이루어졌고 어떤 문제점이 있었으며, 스프링은 어떻게 해결했는 지 살펴보자. 스프링 없이 트랜잭션을 동기화 하는 코드(jdbc 사용) public interface MemberRepository { Long save(Connection conn, Member member); Member findById(Connection conn, Long id); } public class MemberService { ....

    JVM Garbage Collection

    JVM Garbage Collection

    목차 1. JVM Garbage Collection 이란? 2. JVM Garbage Collection 동작 방법 3. JVM Garbage Collection 종류 JVM Garbage Collection 이란? 자바의 메모리 관리 방법 중의 하나로 JVM(자바 가상 머신)의 Heap 영역에서 동적으로 할당했던 메모리 중 필요 없게 된 메모리 객체를 모아 주기적으로 제거하는 프로세스를 말한다 C / C++ 언어는 가비지 컬렉션(Garbage Collection, 이하 GC)가 없어 프로그래머가 수동으로 메모리 할당과 해제를 일일히 해줘야 하지만 Java는 GC가 메모리 관리를 대행해주기 때문에 다음과 같은 장단점이 존재한다 장점 Java 프로세스가 한정된 메모리를 효율적으로 사용할 수 있음 개발자 입..

    [스프링] Spring AOP

    목차 1. AOP란? 2. AOP 용어 3. Spring AOP 동작 과정 4. AOP 적용 예시 코드 🤔 AOP란? AOP란 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍을 의미한다 AOP는 핵심적인 비즈니스 로직으로부터 횡단 관심사 를 분리하는 것에 목적을 둔다 횡단 관심사: 애플리케이션에서 코드가 중복되고, 강력하게 결합되어 있어 다른 로직과 분리할 수 없는 애플리케이션 로직 ex) 로깅, 트랜잭션, 예외 처리, 보안 등 횡단 관심사 코드 예시 카트에 물건을 담는 메서드에 실행 시간을 측정하는 부가 기능 추가 만약 이 메서드 뿐 만 아니라 모든 메서드에 실행 시간을 측정하는 기능을 추가해야 된다면 코드가 중복되고, 강력하게 결합되는 문제가 발생 AOP를 이용하여 부..

    [스프링] 1 + N

    [스프링] 1 + N

    목차 1. 1+N이란? 2. 즉시로딩과 지연로딩 3. 1+N이 발생하는 케이스 4. 1+N의 해결방안 🤔 1 + N 이란? 연관관계가 설정된 엔티티 사이에서 한 엔티티(1)를 조회하였을 때, 조회된 엔티티의 개수(N)만큼 연관된 엔티티를 조회하기 위해 추가적인 쿼리가 발생하는 문제이다 예를 들어 게시글(1) 과 댓글(N) 이 있을 때, 게시글과 댓글이 조인된 형태로 함께 조회되기를 기대했지만, 게시글을 조회(1)하는 쿼리와 댓글을 조회(N)하는 쿼리가 따로 날아가며 총 1+N 번 쿼리가 발생 DBMS에서 직접 쿼리를 작성하면 발생하지 않을 문제지만, JPA와 같은 ORM이 등장하고, 쿼리가 자동화 되면서 발생되는 문제이다 즉시로딩 과 지연로딩 에 대한 개념을 먼저 설명하고, 간단한 예제를 통해 1 + N..

    [소프티어] 함께하는 효도 (자바)

    문제 - 함께하는 효도(★★★☆☆) Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai 풀이한 방법 - DFS를 이용해 각 친구마다 갈 수 있는 모든 경로를 구한다. - 모든 친구의 경로 조합을 구하고, 이를 이용하여 최대 열매 수확량을 구한다. 처음 문제를 봤을 때 간단한 DFS 문제인 줄 알고 각 친구 마다 열매 수확량의 최대 값을 구하고 이 값을 다 더하는 방식으로 구현하였는데, 풀고 보니 각 친구의 최대 값이 모든 친구의 수확량이 최대가 되는 값이 되지는 않다는 걸 깨달았다. 그래서 모든 경로를 탐색하고 그 중 최대 값을 반환하도록 코드를 수정했다. 코드 import java.io.*; import java.util.*; public class Main { public stati..

    gRPC란?

    gRPC란?

    gRPC란? gRPC는 모든 환경에서 실행할 수 있는 최신 오픈 소스 고성능 원격 프로시저 호출(RPC) 프레임워크이다. RPC : RPC는 Remote Procedure Call(원격 프로시저 호출)의 약자로, 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게 하는 프로세스 간 통신 기술을 말한다. 일반적으로 프로세스는 자신의 주소공간 안에 존재하는 함수만 호출하여 실행이 가능하지만, RPC의 경우 자신과 다른 주소공간에서 동작하는 프로세스의 함수를 실행할 수 있게 해주는데, 이는 네트워크를 통한 메시징을 수행하기 때문이다. RPC는 다양한 언어와 프레임워크로 개발되는 MSA(Micro Service Architecture) 구조의 서비스를 만들게 될 때 유용하고..

    프리코스

    블로그를 꽤 오랜만에 작성하는 것 같다. 그동안 이런저런 일이 있었고, 조금 여유가 없기도 했는데 졸업을 앞두고 생각이 많아졌던 것 같다. 그러던 중 프리코스를 진행하게 되면서 다른 생각 없이 한 달 동안 온전히 몰입할 수 있었다. 이미 한 번 겪어봤던 프리코스였지만 작년과는 배우고 느낀 점이 또 달라서 이를 편하게 작성해보려 한다. 어떤 점이 달랐을까? 작년 프리코스를 시작하면서 처음 자바 공부를 시작했고, 이전에는 파이썬으로 알고리즘 문제 풀이 정도만 해본 상태여서 클래스나 객체, 생성자와 접근자 등에 대한 부분들이 생소하게 다가왔었다. 그러다 보니 자바에 대한 학습이 주를 이뤘고, 좋은 코드에 대해 고민하기보단 어떻게 구현해야 동작할 지에 대해서만 고민했었다.(정작 최종 코딩테스트에서는 구현해내지 ..