
[Kotlin] Kotlin In Action을 읽고나서.
2023. 8. 22. 16:51
Java & Kotlin
0. 들어가며🏃🏻♂️ 최근 여러 회사들의 기술 스택을 보면 자바 대신 코틀린을 사용하는 경우가 많이 있는 것 같습니다. 저 또한 회사에서 코틀린을 사용하고 있는데 과연 내가 코틀린스럽게 사용하고 있는걸까? 라는 의문이 드는 순간들이 많았던 것 같습니다. 이에 코틀린 컴파일러 개발자가 직접 썼다는 Kotlin In Action을 읽어보았고, 이에 대한 내용과 생각을 정리해보려 합니다. 1. 코틀린에 대하여😎 많은 자바 개발자들이 자바에 익숙했음에도 불구하고 코틀린으로 기술 스택을 변경해나가는 이유가 무엇일까 궁금했습니다. 이를 알기 위해서는 코틀린의 특징, 철학 등에 대해 먼저 알아보아야 할 것 같은데요. 코틀린 공식문서와 Kotlin In Action에서 설명하는 코틀린을 제 나름대로 요약, 정리해보면..

[JPA] findByXXX 와 findByXXXId 에서 생기는 차이
2023. 8. 5. 00:47
Spring/JPA
0. 문제상황 🤔 Spring Data JPA를 사용하다가 다음과 같은 상황이 있었습니다. A 라는 엔티티가 B 라는 엔티티를 필드로 가지고 있는데 A를 찾기 위해 B 조건을 걸고 싶었던 것이죠. 원래 같았으면 findByB(B b) 와 같은 메서드를 Spring Data JPA를 사용해 추가했을 텐데 제약사항때문에 findByBId(Long id)와 같이 B의 Id 값을 통해 불러오고 싶었습니다. 근데 왠걸 findByBId(Long id)를 호출하고 쿼리를 확인해보았더니 join문이 끼어있더군요. 이런 상황이 왜 벌어졌는지 알아보았고, 이를 알아본 내용을 정리하려합니다. 1. 테스트 해보기❗️ 우선 상황을 가정해보도록 하겠습니다. 아래와 같이 Member 엔티티와 Team 엔티티가 있다고 생각해봅시다..

[Spring] 동시성 이슈 해결하는 방법 찍먹하기
2023. 7. 22. 18:30
Spring
0. 들어가며 🏃🏻♂️ 평소 동시성 이슈에 대해 알고는 있었으나, 이를 어떻게 해결하는지 이론적으로만 알고 있다고 생각하여 코드상으로는 어떻게 구현할 수 있는지에 대해 알아보기 위해 공부하였고, 이에 대한 내용을 정리해보려합니다. 전체적으로 인프런의 재고시스템으로 알아보는 동시성이슈 해결방법 강의를 참고하였습니다. 1. 전체 개요 📖 우선 글에서 가정이 되는 상황을 먼저 소개하겠습니다. 어떤 물품을 판매한다고 가정했을 때 물품의 수량이 있을 것이고, 소비자가 물품을 사는 행위를 할 때마다 Stock entity에 decrease 메서드를 통해 수량을 감소시키는 간단한 상황을 생각해보겠습니다. @Entity public class Stock { private Long quantity; public voi..

[프로그래머스] 등산코스 정하기 - Python
2023. 6. 30. 01:10
Algorithm/프로그래머스
🤔 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 😀 풀이 해당 문제는 최단 경로 문제의 변형으로 최단 경로문제가 익숙하시다면 다익스트라 알고리즘을 떠올리기까지는 비교적 쉬울 것 같습니다. 다만 저처럼 아무생각 안하고 다익스트라를 적용하게되면 시간초과를 맞게됩니다..ㅠ 처음 생각했던 풀이는 모든 출입구에 대하여 (출입구 -> 산봉우리 -> 출입구)의 최단경로를 구하는 방식을 사용했는데 이렇게 되면 N번의 다익스트라를 수행해야해서 시간초과가 나게되죠. 문제를 다시 천천히 읽어보니 2가지 포인트를 찾을 수 있었습니다. 첫 번째는 (출입구 -> 산봉우리)..

[Spring & Java] 왜 난 개발할 때 Runtime Exception을 써왔지?
2023. 5. 16. 14:53
Spring
0. 들어가며 🏃🏻♂️ 스프링으로 개발을 하다 보면 예외에 대한 코드를 작성하는 경우가 많이 있습니다. 예외처리를 위해 커스텀 예외 클래스를 종종 만들곤 했는데 대부분의 경우 RuntimeException을 상속받아 클래스를 작성했습니다. 이러한 방법에 불편함이 없었기 때문에 별생각 없이 쓰고 있다가 문득 나는 왜 개발할 때 Checked Exception이 아닌 Unchecked Exception 즉, Runtime Exception을 주로 사용했지라는 물음에 답을 할 수 없음을 깨달았습니다. 이에 해당 내용을 공부해 보았고, 공부한 내용을 정리해보려 합니다. 1. Java의 Exception 간단한 복습 📖 본격적으로 글을 쓰기 전에 먼저 Java에서의 Exception에 대해 간단히 내용정리를 해..

[Spring] 의존성 주입과 의존성 주입 방법에 대하여.
2023. 4. 30. 16:43
Spring
0. 들어가며 🏃🏻♂️ Spring을 사용하며 객체간의 의존성을 주입할때 생성자 주입을 권장한다는 이유를 듣고는 이를 별생각없이 사용해왔습니다. 이번 글을 통해 의존성 주입 방법에는 무엇이 있고, 생성자 주입에는 어떤 장점이 있길래 이를 권장하는지 알아보도록 하겠습니다. 1. 의존성 주입이란❓ 의존성 주입 방법에 대해 알아보기 전 간단하게 의존한다는 것은 무엇인지 그리고 의존성 주입이 무엇인지에 대해 알아보도록 하겠습니다. A가 B에 의존한다라는 것은 B가 변할 때 A에 영향이 미친다는 것과 같은 말입니다. 한 예로 A가 B의 특정 메소드를 사용한다고 하면 B의 특정 메소드 내부 기능이 변할 때 A에 영향을 미치게 되겠죠. 혹은 B의 특정 메소드 형식이 바뀌면 A에 영향을 미치게 되는 것이 또다른 예시..

[Database] Transaction에 대하여 1편 - 트랜잭션과 ACID
2023. 3. 24. 02:36
CS/데이터베이스
0. 들어가며 🏃🏻♂️ 이번 글은 데이터베이스의 트랜잭션 개념에 대해 가볍게 공부해보려다가 결국 데이터베이스 전공책을 펴게된 김에 정리하게 되었습니다. 본 글은 DATABASE SYSTEM CONCEPTS 7th edition의 Chapter 17. Transaction 내용을 나름대로 번역 + 요약 + 변형한 글입니다. 1. 트랜잭션와 ACID 😎 데이터베이스에서 실행되는 여러 연산은 사용자 입장에서는 하나의 단위로 보이는 경우가 있습니다. 대표적으로 송금이 그 예시이죠. 사실 송금이라는 행위는 한 계좌를 읽고, 돈을 빼고, 다른 계좌를 읽고, 돈을 넣고 등의 행위를 해야합니다. 허나 사용자 입장에서는 논리적으로 하나의 단위인 행위이죠. 이처럼 하나의 논리적 작업 단위를 이루는 연산의 집합을 트랜잭..

[Spring] Spring MVC는 어떻게 요청에 응답할까? (Dispatcher Servlet을 중심으로)
2023. 3. 16. 03:47
Spring
0. 들어가며 🏃🏻♂️ 스프링 MVC를 사용하면 클라이언트에 요청에 따라 적절한 응답을 만들어낼 수 있습니다. 그 과정을 대략적으로나마 알고있었지만 이를 좀 더 명확하게 정리하는 시간을 가지고자 Dispatcher Servlet을 중심으로 스프링이 어떤 방식을 사용해 요청에 응답하는지 알아보도록 하겠습니다. 1. Spring MVC Cycle을 Dispatcher Servlet과 함께 살펴보기 😀 위 그림은 Spring MVC 구조입니다. 실제로는 Dispatcher Servlet에 요청이 들어가기 전 필터를 거치는데 이 부분은 생략되어 있습니다. 처음 볼때는 한눈에 잘 들어오지 않는 구조라 구조의 중심이 되는 Dispatcher Servlet 내부를 살펴보며 한단계 한단계 살펴보도록 하겠습니다. 0...

[Java] Arrays.asList 와 List.of 의 차이점에 대하여.
2023. 3. 9. 18:20
Java & Kotlin
0. 들어가며 🏃🏻♂️ 자바에서는 간단하게 List를 초기화하려할때 Arrays.asList, List.of와 같은 메서드의 도움을 받기도 합니다. 두 메서드는 비슷한 역할을 하는 것 같은데 차이점이 무엇인지에 대해 궁금증이 생겨 글을 정리하게 되었습니다. 1. Arrays.asList 메서드 Arrays.asList는 자바 1.2에서 생긴 메서드로 List 객체를 보다 편하게 생성할 수 있도록 도와주는 메서드입니다. 사용법은 간단하므로 예시를 통해 알아보도록 하겠습니다. // 사용법1 List asList = Arrays.asList(1, 2, 3, 4); System.out.println("asList = " + asList); // asList = [1, 2, 3, 4] // 사용법2 Intege..

[프로그래머스] 길 찾기 게임 - Python
2023. 3. 1. 05:12
Algorithm/프로그래머스
🤔 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 😀 풀이 위 문제는 BST를 구현해본 경험이 있다면 쉽게 풀이할 수 있는 문제입니다. 전체적인 풀이 방향이 BST의 insert, 전위 순회, 후위 순회를 구현하는 문제이기 때문에 이에 대한 내용을 중점적으로 설명해보도록 하겠습니다. 먼저 문제에서 y축의 크기가 클수록 BST 상단에 위치해야하므로 아래 코드와 같이 문제에서 주어진 nodeinfo를 정렬해줍니다. 이때 노드의 y값을 기준으로 정렬합니다. y값을 기준으로 정렬하게 되면 순서대로 노드들을 확인했을 때 부모 노드부터 트리에 삽입할 수 있게 ..