Archive: 2023

Spring MVC의 ArgumentResolver 파헤치기

궁금한 점스프링 MVC로 컨트롤러 코드를 작성하다보면 다음과 같이 컨트롤러 메서드의 파라미터에 다양한 값을 받을 수 있음을 알게 된다. 1234567@RestControllerpublic class SomeClass { @GetMapping("/some") public ResponseEntity<?> getS

클라우드 컴퓨팅과 API의 역할, 대표적인 컴포넌트

클라우드 컴퓨팅? 그게 뭐야?클라우드 컴퓨팅은 IT 자원이 필요할 때 즉시 사용할 수 있는 환경을 의미한다. 공용 클라우드와 사설 클라우드를 어떤 차이가 있나?목적이 다르다.공용 클라우드는 IT 리소스를 제공하고 수익을 버는 것!사설 클라우드는 자사에 IT 리소스를 제공하는 것이지만 수익을 위한 것이 아니다. 비용이 다르다.공용 클라우드는 IT 리소스를 사

F12 서비스 의존성 개선 리팩토링

F12 서비스 링크(https://f12.app/) 기존 상황F12 서비스 백엔드 아키텍처는 도메인 개념 별로 의존성을 그려보면 다음과 같다.총 세가지 양방향 의존이 생긴다. 이런 상황이면 Review에 변경이 생기면 Product -> InventoryProduct -> Member -> Following 까지 변경에 따른 영향이 생길 수

스프링의 프록시

프록시 패턴의 종류간단하게 프록시 패턴을 어떻게 구현하는 지 간략하게 알아보자. 인터페이스 기반 프록시인터페이스가 있고 그 인터페이스를 구현한 구현체가 있는 상황일 때 사용한다. 그 구현체의 프록시는 인터페이스를 구현하여 만든다. 프록시는 타겟으로 구현체를 멤버 변수로 가지며 퍼블릭 메서드를 수행할 때 타겟 객체의 메서드 호출과 함께 프록시 로직을 수행한다

스프링의 예외 처리

기본 예외 처리스프링은 기본적으로 예외가 발생하면 /error에 매핑된 핸들러를 찾는다.만약 /error에 매핑되지 않았다면 우리가 흔히 보게 되는 Whitelabel Error Page를 보여주게 된다. 스프링 MVC의 요청 흐름요청이 오면 필터 -> 서블릿(디스패처 서블릿) -> 인터셉터 -> 핸들러 순으로 진행된다.이때 컨트롤러에서 예

우테코 수료 이후 새로운 프로젝트 준비까지 회고

실패 그리고 반성우아한테크코스가 끝난 뒤 본 면접들에서 모두 떨어졌다. 이유를 정확히 알 수 없지만 내가 느끼기에는 여러가지 아쉬움이 있었다. 먼저 빠르고 정확하게 학습하는 습관을 만들지 못했다. 우아한테크코스를 하면서 주위 사람들이 공부하는 내용을 따라가기 급급했다. 원하는 지식이 무엇인지 차분히 고민하고, 집중해서 빠르고 정확하게 학습해야 하지 않았나

스프링과 JPA 환경에서 동시성 문제 해결하기

동시성 문제동시성 문제는 공유 자원을 여러 스레드가 수정할 때 공유 자원의 일관성이 깨지는 상황을 말한다. 예를 들어 내 계좌에 1000원을 두 스레드가 동시에 입금하려고 한다고 가정해보자. 병렬로 스레드가 작업을 수행하고 위에서 부터 시간순으로 진행됨을 나타낸다.스레드 A가 남은 금액 조회 : 0원스레드 B가 남은 금액 조회 : 0원스레드 A가 남은 금액

서로 연관관계가 없는 엔티티를 DTO로 조회하기

문제 상황전세계의 프로 축구 선수를 관리하는 시스템을 만든다고 가정하자. 이 시스템에는 나라, 리그, 선수 이렇게 세가지 엔티티가 있다. 이 세 엔티티 모두 직접 참조는 되어 있지 않은 상태로 모두 물리적인 연관관계는 없다. 다만 리그가 나라를 id로 간접 참조하고, 선수가 리그를 id로 간접 참조하고 있다고 하자. 그렇다면 코드는 다음과 같을 것이다. 1

애노테이션과 리플렉션

애노테이션 선언과 사용애노테이션 적용코틀린 애노테이션 적용은 자바와 매우 비슷하다. 12@Deprecated("Use removeAt(index) instead", ReplaceWith("removeAt(index)"))fun remove(index: Int) { ... } 애노테이션에 인자로는 원시 타

코틀린의 제네릭스

코틀린의 제네릭스는 자바와 비슷한 점이 많다. 자바와 다른 부분도 많으니 이 점을 살펴보자! 제네릭 타입 파라미터코틀린의 제네릭 타입 파라미터는 자바와 매우 비슷하지만 몇 가지 새로운 기능에 대해 배워보자. 타입 파라미터 제약코틀린은 타입 파라미터 제한으로 클래스나 함수에 사용할 수 있는 타입 인자를 제한할 수 있다. 1fun <T: Number>

고차 함수(파라미터와 반환 값으로 람다 사용)

고차 함수고차 함수는 다른 함수를 인자로 받거나 함수를 반환하는 함수다. 코틀린의 고차 함수가 인자나 반환값으로 함수를 사용하기 위해서는 함수 타입이 필요하다. 함수 타입자바에서 람다 식을 매개변수나 반환값으로 사용하기 위해서는 함수형 인터페이스를 사용했다. 코틀린에서는 함수 타입이 존재한다. 12val sum: (Int, Int) -> Int = &

연산자 오버로딩과 기타 관례

산술 연산자 오버로딩코틀린에서 어떤 언어 기능과 미리 정해진 이름의 함수를 연결해주는 기법을 코틀린에서 관례라고 부른다.코틀린에서 관례를 사용하는 가장 단순한 예는 산술 연산자다. 기존 자바에서는 원시 타입과 문자열 정도에 산술 연산자를 쓸 수 있다. 하지만 관례를 적절히 사용하면 다른 클래스에도 산술 연산자를 쓸 수 있다. 이항 산술 연산 오버로딩1234

퀴즈로 학습하는 운영체제와 정보기술의 원리

3장 메모리 및 입출력 장치를 제어하는 하드웨어 장치는 무엇인가? 컨트롤러라는 하드웨어 장치가 메모리 및 입출력 장치를 제어한다. 마치 입출력 장치마다 작은 CPU가 있다고 생각하면 편하다. 운영체제 코드 중 메모리에 올려지는 중요한 코드는 무엇이라고 하는가 운영체제의 모든 코드를 메모리에 올리면 자원 낭비가 생긴다. 운영체제 중 주요 코

패키지 설계의 원칙

단위 크기: 패키지 응집도의 원칙개발자가 어떻게 클래스를 패키지에 분류해 넣을지 결정할 때 도움이 되는 규칙 세가지를 알아보자. 이때 각 클래스의 상호 관계가 일부분이라도 밝혀져 있음을 가정한다.모듈의 응집도는 모듈이 단 하나의 기능을 수행하는 속성을 의미했지만 패키지 응집도는 그보다 복잡하다. 재사용성과 개발 용이성에서 상충하는 가치를 검토하고 어플리케이

코틀린 타입 시스템

널 가능성널이 될 수 있는 타입어떤 타입이든 타입뒤에 ?를 붙이면 그 타입의 변수나 프로퍼티에 null 참조를 저장할 수 있다. 널 가능성이 있는 타입은 호출 가능한 메서드가 제한된다. 또한 파라미터에 널 가능성이 없는 타입이 선언된 경우 널 가능성이 있는 타입은 인자로 전달할 수 없다. 널 가능성이 있는 타입은 널 체크 이후 널 가능성이 없는 타입처럼 사

람다로 프로그래밍

람다 식과 멤버 참조람다 식의 문법코틀린의 람다 식은 항상 중괄호로 둘러 쌓여 있다. 그리고 인자 목록을 괄호로 싸지 않는다. 람다를 변수에 저장하고 함수처럼 사용할 수 있다. 123val sum = {x: Int, y: Int -> x + y}println(sum(1, 2)) 실행 시점에서 코틀린 람다 호출에는 아무 부가 비굥이 들