cl8d의 등록된 링크

 cl8d로 등록된 티스토리 포스트 수는 86건입니다.

[우테코 5기] 지하철 미션 회고 [내부링크]

가비와 진행한 레벨 2 세 번째 페어 프로그래밍 미션인 지하철 미션이다...! 우테코 하면서 진행했던 미션 중에서 가장 어려운 미션이 아니었나 싶다. 객체지향적인 코드를 작성하는 것과 단순 구현 그 사이에서 엄청 헤맸던 것 같다... 앞으로 개발할 때도 레벨 1에서 배웠던 것들을 정말 잊지 않아야겠다 c ️ 작성한 코드 GitHub - Cl8D/jwp-subway-path: 레벨 2 지하철 미션 레파지토리 레벨 2 지하철 미션 레파지토리. Contribute to Cl8D/jwp-subway-path development by creating an account on GitHub. github.com ️ 1차 PR [1단계 - 지하철 정보 관리 기능] 져니(이지원) 미션 제출합니다. by Cl8D ·..

[Network] 서버의 액세스가 증가할 때 어떻게 처리할까? - 캐시 서버와 포워드 프록시, 리버스 프록시 [내부링크]

DNS 서버를 통해 다중 서버로 분산 처리하기 서버의 액세스가 증가한다면 단순히 회선을 빠르게 하는 것으로도 부족할 수 있다. 단일 서버의 한계를 극복하기 위해서는, 여러 대의 서버를 이용하여 처리를 분산시킬 수 있는데 이를 '분산 처리'라고 한다. 클라이언트의 리퀘스트를 어떻게 하면 여러 대의 서버로 분배할 수 있을까? 바로, DNS 서버를 통해 분배하는 것이다. DNS 서버에 동일한 이름으로 여러 대의 웹 서버를 등록해둔다면, 조회가 있을 때마다 조회된 IP 서버를 차례로 반환한다. 이때, 라운드 로빈 방식을 통해 균등하게 액세스를 분산시킬 수 있도록 돕는다. aaa.com이라는 도메인에 대해 192.0.2.60, 192.0.2.70, 192.0.2.80이 있다면 아래와 같은 순서로 반환한다...

[JPA] OSIV 찍먹하기 2편 - 준영속 상태 엔티티를 지연 로딩하기 (FetchType.EAGER와 N+1 문제, fetch join) [내부링크]

들어가기 전 지난 포스팅에서는 준영속 상태의 엔티티는 지연 로딩할 수 없다고 말했다. 이는, 지연 로딩을 위한 프록시 객체를 초기화하기 위해 영속성 컨텍스트가 필요한데, 준영속 상태의 엔티티는 영속성 컨텍스트의 관리 범위에서 벗어났기 때문이다. 그렇다면, 준영속 상태의 엔티티는 어떻게 처리해야 할까? 글로벌 페치 전략을 LAZY에서 EAGER로 수정하기 간단하게 말하면 지연 로딩을 사용하지 말고, 즉시 로딩을 사용하자는 것이다 @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Crew { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private ..

[JPA] OSIV 찍먹하기 1편 - 프록시 객체와 준영속 상태 엔티티 [내부링크]

금요일에 근로하면서 구구와 근로 크루들의 도움 덕분에 JPA를 다시금 공부하게 됐다 나도 완전하게 잘 아는 내용은 아닌지라 아는대로 정리해보고자 한다. 영속성 컨텍스트와 트랜잭션 영속성 컨텍스트란? 엔티티를 영속화시키는 환경. EntityManager를 통해 엔티티를 저장하거나 조회하면 영속성 컨텍스트에 보관된 엔티티 정보를 바탕으로 요청을 처리하게 된다. EntityManager 생성 시 1개가 만들어진다. 특징 - 식별자 값으로 엔티티를 구분한다. - 트랜잭션 커밋 시점에 flush. (쓰기 지연 - 내부 쿼리 저장소에 SQL 저장 후 한 번에 플러시) - 1차 캐시를 사용한다. (처음에 1차 캐시에서 엔티티 조회 > 없으면 DB 조회 > 1차 캐시에 저장하는 형태 = '영속화') - ..

[Network] 방화벽의 패킷 필터링 과정 알아보기 [내부링크]

들어가기 전 지난 포스팅까지는 클라이언트 측 LAN에서 라우터까지 어떻게 패킷이 흘렀는지 알아보았었다. 그 이후로도 전기 신호로 변환되고, 패킷이 중계되고, 통신 회선이나 프로바이더의 네트워크를 통해 서버 측으로 어떻게 이동하는지 그러한 과정이 있지만 내용이 너무 깊은 것 같아서 생략했다. 이번 포스팅에서는 웹 서버에서 어떤 식으로 요청이 처리되는지 알아보고자 한다. 웹 서버는 어디에 설치될까요? 과거에는 사내의 LAN에 서버를 설치한 다음, 인터넷에서 직접적으로 액세스했다. 이러면 패킷은 액세스 회선, 서버측 라우터를 경유해서 서버 머신에 도착하여 패킷이 흐르게 된다. 하지만, 이 방법은 서버와 클라이언트 모두에 글로벌 주소를 할당해야 돼서 IP 주소가 부족해진다. 또한, 서버가 직접적으로 노..

[우테코 5기] 장바구니 미션 회고 [내부링크]

헙크와 진행한 레벨 2 두 번째 페어 프로그래밍 미션인 장바구니 미션이다! 어쩌다 보니 레벨 1 데일리 조 팀원들과 한 번씩 페어 프로그래밍을 하는 느낌이다 ㅎ_ㅎ 재밌다! 이번 미션에서는 요구사항보다는 개인적으로 진행하고 싶은 부분들에 대해 구현하다 보니 되게 재밌게 구현했었다. 하지만... 지금 와서 코드를 보니 아직 많이 부족하다는 생각이 들었다 c... 어렵다! ️ 작성한 코드 GitHub - Cl8D/jwp-shopping-cart: 레벨 2 장바구니 미션 레파지토리 레벨 2 장바구니 미션 레파지토리. Contribute to Cl8D/jwp-shopping-cart development by creating an account on GitHub. github.com ️ 1차 PR [1단계 ..

[Network] 라우터의 주소 변환과 패킷 필터링 기능 [내부링크]

들어가기 전 지난 포스팅에서는 라우터의 패킷 중계 동작에 대해서 알아보았다. 이번 포스팅에서는 라우터의 주소 변환 기능과 패킷 필터링 기능에 대해서 알아보자! 주소 변환이 나온 이유 라우터는 다양한 일을 하지만, 그중 핵심은 주소 변환 및 패킷 필터링 기능이다. 주소 변환은 왜 나왔을까? 이전에는 IP주소를 관리 기관에 신청서를 내서 할당받았지만, 인터넷에 접속하는 기기가 많아지면서 할당해줄 주소가 부족해지는 현상이 발생했었다. 이를 해결하기 위해서 동일한 회사에서 사용하는 주소는 다른 회사의 주소와 동일할 수 있도록 만들었다. 이는 어차피 다른 회사의 패킷은 서로 왕래할 일이 없으며, 같은 회사에서끼리 별도의 사내망으로 통신하기 때문에 다른 회사와 겹쳐도 상관없는 것이다. 덕분에 같은 회사에 있..

[Web] JWT를 통한 인증 과정 알아보기 [내부링크]

들어가기 전 마찬가지로 테코톡에서 진행했던 발표 자료를 바탕으로 글을 작성하였습니다! 인증과 인가, 쿠키 / 세션 방식에 대해서는 이전 포스팅에서 작성하였습니다. [Web] 인증과 인가란? - 쿠키와 세션에 대해서 알아보자! 들어가기 전 테코톡에서 진행한 인증과 인가 관련 자료들을 바탕으로 글을 작성하였습니다 :D 인증 (Authentication) 보호된 리소스에 접근하는 것을 허용하기 이전에, 등록된 유저의 신원을 cl8d.tistory.com 4. 효율적으로 인증하기 지난 포스팅에서는 세션을 통해서 안전하게 인증하는 방법을 알아보았다. 하지만, 세션 방식의 가장 큰 문제점은 서버도, 클라이언트도, 그리고 세션 스토리지까지 사용자의 정보를 관리하는 주체가 너무 다양하다는 것이다. 이러한 문..

[Spring] 스프링 테스트 - 테스트 컨텍스트 캐싱, @SpringBootTest, @WebMvcTest [내부링크]

들어가기 전 이전 포스팅과 마찬가지로 스터디에서 맡은 '테스트' 파트에 대해서 블로그에 정리해보고자 한다 테스트 쪽은 공식 문서도 생각보다 가독성이 너무 안 좋아서 최대한 간략하게만 훑어보았다. 아직 모르는 게 정말 많은 것 같다 ㅎㅎ 통합 테스트 vs 인수 테스트 통합 테스트는 특정 작업을 수행하기 위해, 외부 작업들과 연관되어 있다면 해당 외부 작업들을 포함하여 구성 요소가 잘 돌아가는지 테스트하는 방법으로, @SpringBootTest 어노테이션을 활용하여 진행하는 방법이 많다. (관련된 모든 빈을 가져와서 테스트 하는 느낌) 반면, 인수 테스트의 경우 사용자의 시나리오에 맞춰 수행하는 테스트이다. 인수 테스트의 방법론으로 E2E 테스트를 통해 주어진 시나리오에 따라 애플리케이션의 모든 ..

[Spring] IoC Container의 생명주기와 DI, 빈 스코프, 빈과 스태틱 메서드 [내부링크]

들어가기 전 스터디에서 발표 자료로 준비했던 내용인데, 블로그에도 옮겨두면 좋을 것 같아서 정리하는 글 프롤로그 로드맵의 키워드 위주로 정리하였습니다! DI (의존관계 주입) ️ 의존한다? A가 B를 사용하고, B를 변경하면 A에 영향을 끼치는 관계. 의존관계 주입은 다음 세 가지 조건을 충족하는 작업을 의미한다. - 클래스 모델이나 코드에는 런타임 시점의 의존관계가 드러나지 않도록, 인터페이스만 의존해야 한다. - 런타임 시점의 의존관계는 컨테이너나 팩터리와 같은 제 3의 존재 (ex. IoC container)가 결정한다. - 의존관계는 사용할 오브젝트에 대한 레퍼런스를 외부에서 제공해줌으로서 만들어진다. ️ DI를 사용하면 무엇이 좋은가? - 객체간의 결합도 감소 → 재사용성, 유지보..

[Network] 라우터의 패킷 중계 동작에 대해서 알아보자! [내부링크]

들어가기 전 지난 포스팅까지는 클라이언트 측에서 발생하는 일, 브라우저 -> 소켓 라이브러리 -> 프로토콜 스택 -> LAN 드라이버 -> LAN 어댑터까지 어떻게 HTTP 요청이 처리되는지 알아보았다. 이번 포스팅에서는 [클라이언트 측 LAN]에서 일어나는 일 중, 트위스트 페어 케이블, 리피터 / 스위칭 허브를 지나 라우터에서 어떤 식으로 패킷을 중계하는지 알아보자. (케이블, 허브에서 일어나는 건 전기신호에 대한 내용이라 정리하지 않았다.) 라우터는 어떻게 생겼을까? 기본적으로 라우터의 경우 네트워크 간의 패킷을 중계하는 장치로, 이더넷 같은 링크 계층 프로토콜과 IP 같은 네트워크 계층 프로토콜을 모두 지원한다. 실제로는 훨씬 복잡하겠지만 간결하게 그리면 이런 구조로 생겼다. 여기서 '중계..

[Network] TCP/IP의 패킷 처리 및 UDP 프로토콜의 데이터 송신 과정 알아보기 [내부링크]

들어가기 전 지난 포스팅에서는 프로토콜 스택에서의 데이터 송/수신 및 말소 과정에 대해서 알아보았다. 이번 포스팅에서는 TCP / IP에서 패킷을 어떻게 처리하고 LAN 어댑터로 어떻게 송신되는지 알아보자. 그리고 간단하게 UDP에서의 송,수신 동작을 알아보자! 패킷은 어떻게 구성되어 있을까? 패킷은 크게 헤더와 데이터로 구성된다. 헤더에는 수신처를 나타내는 주소 같은 제어 정보가 들어있으며, 데이터에는 실제로 운반되는 데이터가 들어있다. 생성된 패킷은 중계 장치로 도착하고, 중계 장치는 헤더 정보를 바탕으로 패킷의 목적지를 판단한다. 이때, 중계 장치 내에는 어느 수신처가 어디에 있는지에 대해 기록된 표가 존재하며, 해당 표를 바탕으로 패킷의 목적지를 판단한다. 여러 개의 중계 장치를 거쳐서 패..

[Intellij] terminal, Intellij project 자바 버전 변경하는 방법 [내부링크]

터미널에서 자바 버전 바꾸기 설치되어 있는 모든 자바 버전 (위치) 확인 /usr/libexec/java_home -V JAVA_HOME 경로 확인 vim ~/.bash_profile 위에서 확인한 자바 버전 따라서 JAVA_HOME 변경해주기 JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home PATH=$PATH:$JAVA_HOME/bin export JAVA_HOME export PATH 업데이트된 사항 적용 source ~/.bash_profile ️ 만약, zsh 쉘을 사용하고 있다면 환경 설정 정보가 덧씌워지기 때문에 여기서 꼭 변경해줘야 한다. vi ~/.zshrc # Path to your oh-my-z..

[Web] 인증과 인가란? - 쿠키와 세션에 대해서 알아보자! [내부링크]

들어가기 전 테코톡에서 진행한 인증과 인가 관련 자료들을 바탕으로 글을 작성하였습니다 :D 인증 (Authentication) 보호된 리소스에 접근하는 것을 허용하기 이전에, 등록된 유저의 신원을 입증하는 과정이다. 식별 가능한 정보를 바탕으로, 서비스에 등록된 유저의 신원을 입증하는 과정! ex) 어떤 사이트에서 글을 작성하기 위해서는 해당 사이트의 회원이어야 한다. '로그인하지 않은 회원'의 경우 글을 작성할 수 없으며, 해당 회원의 로그인 여부를 확인하는 과정이 '인증'이다. 인가 (Authorization) 요청된 리소스에 접근할 수 있는 권한이 있는 인증된 유저인지 입증하는 과정이다. ex) 로그인까지는 완료했는데, 해당 사용자는 그 사용자가 작성한 글만 제거하거나 수정이 가능하다. ..

[객체지향의사실과오해] 04 - 타입과 추상화 [내부링크]

️ 역할, 책임, 협력 (기억에서 잊혀졌겠지만) 1장에서 언급하였던 예제를 다시 가져와보자. 손님냥이 카페에서 커피를 주문하기까지 다음과 같은 요청과 응답이 이루어진다. 1. 손님냥은 알바냥에게 커피를 요청한다. 2. 알바냥은 셰프냥에게 커피를 만들 것을 요청한다. 3. 요청을 받은 셰프냥은 커피를 만들기 시작하면서 응답한다. 이는 손님냥의 커피 주문에 대한 응답이기도 하다. 4. 만든 커피를 알바냥이 건네받아 손님냥에게 응답한다. 여기서 셰프냥이 커피를 만들라는 요청을 받을 수 있는 이유가 무엇이었을까? 셰프냥은 바리스타 자격증이 있기 때문에 커피를 만들라는 요청에 대해 적합하게 대응할 수 있었기 때문이다. 객체지향 세계에서 어떤 객체가 어떤 요청에 대답할 수 있거나 적절한 행동을 할 의무가 있는 경..

[Spring] Rest-docs 연동하기 (version 3.3.2) - 1편 [내부링크]

들어가기 전 사실 rest-docs는 미션 요구사항은 아니었지만, 개인적인 욕심으로 한 번 직접 구축해보고 싶다는 생각이 들었어서 미션하는 김에 함께 진행하게 되었다. (어차피 추후 미션 진행하면서 프론트 크루와 협업하게 되면 세팅해야 하니까...) RestDocs를 연동할 때 인수 테스트 레벨에서 진행할지 (RestAssured) 아니면 컨트롤러의 단위 테스트에서 진행할지 고민했었는데, RestAssured를 통해 사용하게 되면 BDD 스타일이라 더 직관적일 것 같긴 하지만 아무래도 속도가 느리다 보니까 그냥 컨트롤러 레이어에서 진행했다. (실제로도 컨트롤러 레벨에서 많이 진행하는 것 같다.) ️ Rest-docs가 어떤 거지? Spring Rest Docs는 Restful 서비스에 대해 정확하고..

[Gradle] gradle 빌드 시 java.lang.IllegalAccessError: class org.gradle.internal.compiler.java.ClassNameCollector 오류 발생했을 때 [내부링크]

문제 상황 미션 진행하면서 gradle로 빌드하려고 하려고 다음과 같이 진행하였다. ./gradlew clean build 근데 다음과 같은 오류가 발생하였다... java.lang.IllegalAccessError: class org.gradle.internal.compiler.java.ClassNameCollector (in unnamed module @0x757e40cf) cannot access class com.sun.tools.javac.code.Symbol$TypeSymbol (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.code to unnamed module @0x757e4..

[Network] 프로토콜 스택의 데이터 송/수신, 말소 과정 알아보기 [내부링크]

저번 포스팅에서는 프로토콜 스택 및, 위에서 소켓 작성에 대한 부분을 알아보았었다. 이번 포스팅에서는 구체적으로 프로토콜 스택의 데이터 송수신 및 말소 과정에 대해서 알아보고자 한다. ️ 소켓에 접속하기 소켓을 만들면 애플리케이션 (브라우저)는 connect()를 호출하고, 프로토콜 스택은 본인 쪽의 소켓을 서버 측에 접속한다. 이더넷이나 통신 회선은 기본적으로 항상 케이블이 연결되어 있기 때문에, 언제든지 신호를 보낼 수 있어서 데이터를 신호로만 변환하면 된다. 하지만 만약 소켓을 만든 다음에 애플리케이션에서 송신 의뢰가 온다면, 프로토콜 스택은 어떻게 될까? 우선, 기본적으로 소켓을 생성한 다음에는 아무것도 없기 때문에 통신 상대도 모른다. 그래서 의뢰가 온다면 데이터를 어디로 보내면 좋을지도 알 ..

[Spring] 자바의 inner class는 스프링 빈이 될 수 있을까? [내부링크]

들어가기 전 스프링 빈 등록 과정에 대해 여러 정보를 찾아보다가, inner class의 경우 빈으로 등록될 수 없다는 글을 보았다. 뭔가 등록이 될 것 같은데 안 된다고 해서 직접 실험을 해보았다 c ️ inner class와 static class 우선, 두 가지에 대한 개념부터 제대로 잡고 가야 한다. 흔히 내부 클래스라고 한다면, static 키워드를 사용하여 작성하는 경우가 많기 때문에 이 둘을 같은 개념으로 혼동하는 경우가 있다. 정확한 개념을 알기 위해 Oracle 공식 문서를 확인해보자. The Java programming language allows you to define a class within another class. Such a class is called a nes..

[Network] 프로토콜 스택에 대해서 더 자세히 알아보자! [내부링크]

지난 포스팅에서는, 클라이언트와 서버 사이에 어떤 식으로 소켓이 생성되는지 알아보았다. 그 사이에는 늘 '프로토콜 스택' 이라는 친구가 있었는데, 이번 포스팅에서는 프로토콜 스택이 뭔지 조금 더 구체적으로 알아보고자 한다. 앞으로 포스팅을 진행하면서 윗부분의 절차들을 하나하나씩 알아나갈 예정이다. ️ 프로토콜 스택이란? 위의 그림을 보자. 최상단의 네트워크 애플리케이션은 브라우저, 웹 서버 등의 프로그램이 해당하며, 여기서부터 아래로 향하게 된다. 우리가 이전 포스팅까지 다루었던 내용이 애플리케이션에서 소켓 라이브러리, 그리고 리졸버를 통해 DNS 서버에 조회하고 소켓을 만드는 과정까지 다룬 것이다. 그 다음 단계는 OS의 내부이며, 여기에 프로토콜 스택이 존재한다. 프로토콜 스택은 TCP / UDP라..

[Network] 프로토콜 스택과 메시지의 송신 과정 [내부링크]

들어가기 전 지난 포스팅까지는 어떻게 도메인으로 IP 주소를 얻어오는지 배웠다. 이번 포스팅에서는 OS 내부에 있는 프로토콜 스택에 어떻게 메시지를 송신하도록 하는지, 그 플로우를 알아볼 예정이다. ️ 데이터의 송-수신은 어떻게 일어날까? 우선 기본적으로 DNS 서버에 IP 주소를 조회했던 것처럼, 이번에도 소켓 라이브러리를 활용한다. 위 그림을 보면, 어떤 파이프 같은 것을 통해서 데이터가 흐르고 있는 것을 볼 수 있다. 실체화된 것은 아니고, 그저 '데이터의 통로'로서 한쪽 끝에서 다른 쪽 끝까지 파이프를 통해서 데이터가 흐르는 것이다. 여기서 '소켓'이라는 친구가 있는 것을 볼 수 있다. 파이프의 양끝에 존재하는 데이터의 출입구이다. 서버가 소켓을 만들고, 클라이언트에서도 소켓을 만들어서 파이..

불변객체로 만드는 것이 항상 좋을까? - Value Object vs Reference Object [내부링크]

들어가기 전 이번 자동차 경주 미션을 진행하면서 레벨 1 때 했던 코드를 리팩터링을 하다 보니 페어와 '불변 객체로 만드는 게 어떠냐는 의견을 받았다. 당시 레벨 1 미션을 진행할 때는 불변 객체의 정의에 대해서 잘 알지 못했었고, 미션을 진행하면서 불변으로 만드는 게 여러 가지 이점이 있다는 걸 공부했었기 때문에 별 생각 없이 그렇게 진행하고자 했다. public class Car { private static final int CAR_FORWARD_NUMBER = 4; private final CarName name; private final CarPosition position; ... public Car move(final int power) { if (power >= CAR_FORWARD_N..

[Spring] Jackson annotation - Deserialization 알아보기 [내부링크]

지난 번에 직렬화 관련해서 글을 작성했었어서, 이번에는 Jackson에서 제공하는 역직렬화 기능에 대해서 공부해보고자 한다. ️ Deserialization Deserialization is the process of reconstructing a data structure or object from a series of bytes or a string in order to instantiate the object for consumption. 역직렬화는 data structure나 객체를 일련의 바이트나 문자열로 재구성하여 사용할 수 있도록 인스턴스화하는 프로세스이다. 직렬화의 반대라고 볼 수 있으며, 변환된 데이터를 장치간의 저장이나 전송하는 것이다. Jackson에서는 어떤 어노테이션을 통해 역직..

[우테코 5기] 웹 자동차 경주 미션 회고 [내부링크]

두둠과 진행한 레벨 2 첫 페어 프로그래밍 미션인 웹 자동차 경주 미션이다 :D 어쩌다 보니 1등으로 레벨 2 첫 미션을 마무리하게 되었다 레벨 2의 목표는 미션에 대한 회고글이 밀리지 않는 것이기 때문에, 빠르게 회고 글을 작성해보고자 한다. 이번 미션은 요구사항에 비해 미션 기간이 길었기 때문에, 미션을 여유롭게 진행할 수 있었다. 남은 기간 동안에는 스프링에 대해서 좀 공부해보는 시기로 가져보려고 한다. ️ 작성한 코드 GitHub - Cl8D/jwp-racingcar: 레벨 2 자동차 경주 게임 웹 구현 저장소 레벨 2 자동차 경주 게임 웹 구현 저장소. Contribute to Cl8D/jwp-racingcar development by creating an account on GitHub..

[Network] IP 주소와 DNS 서버의 동작 원리 [내부링크]

️ 들어가기 전 저번 게시글에서는 HTTP 메시지를 어떤 식으로 만드는지 배웠다. 브라우저는 URL을 해독하거나 HTTP 메시지를 만드는 것까지는 진행하지만, 네트워크에 송출하는 기능이 없기 때문에 OS에 의뢰하여 송신하게 된다. 이때, URL 내부에 있는 서버의 도메인명에서 IP 주소를 조사하는데, OS에게 송신할 때는 IP 주소로 메시지를 받을 상대를 지정하기 때문이다. 어떻게 IP 주소를 조사하는지 간략하게 정리해보자. 또한, IP 주소를 도메인 주소로 변환하기 위해 어떻게 하는지 알아보자. ️ TCP / IP 네트워크 TCP/IP 네트워크는 작은 서브넷을 라우터로 연결하여 전체 네트워크를 완성한다. 서브넷이란 패킷을 중계하는 장치인 허브와 여러 PC가 연결된 형태라고 생각해도 된다. XX동 Y..

[HTTP] GET vs POST, GET은 body 값을 가지면 안 될까? [내부링크]

들어가기 전 스터디를 진행하면서, GET 요청과 POST 요청의 차이가 단순히 '의미론적'으로만 차이가 있는 건지 궁금해서 찾아보게 되었다. 습관적으로 나는 리소스 등록 시 POST를, 그리고 조회 시 GET을 사용했었다. 하지만 리소스 등록 시에도 GET을 사용하는 것이 문법적으로도 안 되는 건지, 아니면 관습적으로 사용하지 않는 것인지는 궁금해서 찾아보았다. 그리고 몇 가지 요청들을 실습해가며 어느 정도 생각을 정리해두었다. (영어 원문에 대한 번역을 하다 보니 다소 의미적 차이가 있을 수도 있습니다 c) ️ GET The GET method requests that the target resource transfer a representation of its state. GET requests..

[Spring] 스프링과 객체지향의 상관관계 - DI란 무엇일까? [내부링크]

레벨 2 수업 시간에 의존성 주입 관련 내용을 들으면서 조금 정리를 해보고 싶어서 간단하게 글을 작성해보고자 한다. 그동안 스프링은 객체지향적으로 작성하기 좋은 프레임워크라고 말은 들어봤지만, 정확하게 왜인지는 이해한 적이 없었다. 정리를 통해서 조금 더 머리에... 담아두고자 한다! ️ 객체지향적 설계과 디자인 패턴 우선, 객체지향 설계 원칙으로 많이들 언급하는 SOLID에 대해서 간단하게 생각해보자. - SRP (단일 책임 원칙): 어떤 클래스를 변경하는 이유는 오직 하나뿐이어야 한다. - OCP (개방 폐쇄 원칙): 자신의 확장에는 열려있고, 주변의 변화에는 닫혀있어야 한다. - LSP (리스코프 치환 원칙): 서브 타입은 항상 자신의 기반 타입으로 교체할 수 있어야 한다. - ISP (인터페이스..

[Spring] Jackson annotation - Serialization 알아보기 [내부링크]

문득 직렬화 관련해서 궁금해하다가, Jackson 라이브러리에 대해서도 한 번 공부해보면 좋을 것 같아서 작성하는 글! 정말 간단하고 얕게 정리할 예정이라, 나중에 깊게 공부하게 된다면 한 번 더 작성해보지 않을까 싶다 c ️ Serialization Serialization is taking the properties of an object, and converting them into json string representation. 직렬화란 무엇일까? 객체의 속성을 가져와서 Json 문자열 표현으로 변환하는 것을 의미한다. 정확하게는, 객체를 바이트 스트림으로 변환하는 것이며, 직렬화된 객체는 나중에 다시 복원이 가능하다. public class Crew { private String name; ..

[Network] 웹 브라우저 요청과 HTTP 리퀘스트 [내부링크]

️ URL 입력과 패킷 여행 교재에 나와있는 내용이지만 나름 정리해보고 싶어서 다시 그림을 그려보았다. 클라이언트, 웹 서버 LAN, 웹 서버까지 한 번 돌아보면서 정리를 한 다음, 시간이 될 때 허브나 회선 쪽을 공부해보고자 한다. (성공과 실패를 결정하는 1% 의 네트워크 원리를 읽고 정리한 내용입니다 :D) ️ 사용자가 URL을 입력했을 때 생기는 일 URL이란 무엇일까? Uniform Resource Locator로, http://로 시작하는 것뿐만 아니라 file:, ftp:, mailto: 등등 다양한 종류의 것으로 시작하는 URL들이 존재한다. 브라우저는 단순히 웹 서버에 엑세스 하는 역할만 하는 것이 아닌, 파일 다운로드, 업로드 같은 FTP 클라이언트나 메일 클라이언트 기능도 있기 때..

[Spring] Database Initialization : schema.sql과 data.sql [내부링크]

문제 상황 페어 프로그래밍을 진행하면서, 분명 테스트 코드 각각을 실행했을 때는 잘 돌아갔는데 전체를 실행하니까 다음과 같은 오류를 만났었다. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Invocation of init method failed; nested exception is ..

[객체지향의사실과오해] 03 - 타입과 추상화 [내부링크]

️ 추상화 추상화란, 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로 복잡도를 극복하는 방법이다. 복잡성을 이해하기 쉬운 수준으로 단순화하는 것이 목적이다. 지난 포스팅부터 계속 얘기하고 있는 '고양이 스낵바'라는 게임이다. 위 이미지는 실제로 게임을 플레이하는 장면이다. 위 그림에서 무엇이 보이는가? 각각 손님냥, 알바냥, 셰프냥이라고 명확하게 존재한다. 그러나, 손님냥도, 알바냥도, 셰프냥도 모두 고양이다. 그리고 동시에 객체라고 볼 수 있다. 이와 같이 각각의 객체들을 ‘고양이’라고 한 번에 정의내리는 것을 '추상화'라고 한다. 고양이는, 공통점을 가진 객체들을 포괄할 수 있는 개념이 된다. 그리고, 이러한 ‘고양이’라는 개념을 적용하여 다시 손님냥, 알바냥, 셰프냥으..

[모던자바인액션] 스트림을 활용해보자! - 스트림 메서드 [내부링크]

모던 자바 인 액션 챕터 5을 읽고 정리한 글입니다. ️ 필터링 프리디케이트로 필터링하기 List crews = new ArrayList(); List backendCrews = crews.stream() // 람다의 인수(백엔드 크루)를 받아 특정 요소를 선택한다. .filter(crew -> crew.getCourse() == Course.BACKEND) .collect(Collectors.toUnmodifiableList()); 지난 챕터에서 사용했던 예제이다. 여기서 filter 메서드는 Predicate를 인수로 받아서, 해당 프리디케이트와 일치하는 모든 요소를 포함하는 스트림을 반환한다. 고유 요소 필터링 distinct 메서드를 사용하면 중복을 제거한 요소로 이루어진 스트림을 반..

[모던자바인액션] 스트림이란 무엇일까? [내부링크]

모던 자바 인 액션 챕터 4을 읽고 정리한 글입니다. ️ 스트림이란? 자바 8에 새롭게 들어온 기능 중, 가장 핵심적인 기능이라고 말해도 무방하다. 컬렉션 데이터의 반복을 도와주고, 멀티 스레드 코드 없이 병렬성을 구현할 수 있는 아주 유용한 친구이다. 또한, filter나 sorted, map, collect 같은 연산은 ‘high-level building block’이라고 하는데, 스트림을 마치 블록처럼 쌓고, 조립할 수 있다는 점이 큰 특징이다. ️ stream 메서드 스트림이란, 데이터 처리 연산을 위해 소스에서 추출된 연속된 요소이다. 1) 연속된 요소 컬렉션은 데이터에 대한 자료구조였다면, 스트림은 이를 어떤 식으로 계산할지에 대해 다룬다. 두 가지 모두, 연속된 값 집합의 인터페..

[모던자바인액션] 메서드 참조 : 람다를 간결하게 사용하기 [내부링크]

모던 자바 인 액션 챕터 3을 읽고 정리한 글입니다. ️ 메서드 참조 메서드 참조를 사용해서 더 코드를 간결하게 만들어보자. // Before inventory.sort((a1, a2) -> a1.getCourse().compareTo(a2.getCourse())); // After inventory.sort(comparing(Crew::getCourse)); 메서드 이름을 활용하는, '메소드 참조'를 활용하면 람다를 더 간결하게 표현할 수 있다. 메서드 참조를 하기 위해서는 구분자(::)를 활용한다. 메서드 참조를 만드는 방법 1. 정적 메서드 참조 (args) -> ClassName.staticMethod(args) ==> ClassName::staticMethod 2. 다양한 형식의 인스턴..

[우테코 5기] 레벨 1 레벨 인터뷰 정리 및 감정 회고 [내부링크]

️ 레벨 인터뷰란?드디어 레벨 1 방학 기간 동안 밀렸던 블로그 포스팅의 마지막, 레벨로그를 정리하고자 한다. 우테코에서는 매 레벨이 끝나면 조별로 '레벨 인터뷰'라는 것을 진행한다. 레벨 인터뷰는 각 레벨에서 학습한 내용을 인터뷰 형식으로 진행하는 말하기 활동으로서, 자신이 알고 있는 지식을 말로 표현하는 연습을 통해 메타인지를 기를 수 있다. (추후 기업의 기술 면접, 인터뷰에 대한 대비라고 봐도 좋다 ) 그룹당 6-7명이 진행하며, 1명의 인터뷰어, 3명의 인터뷰이, 2-3명의 옵저버와 함께 진행한다. 한 사람당 총 인터뷰 20분, 그리고 피드백 10분씩 진행하는데 생각보다 이 시간이 되게 빠르다. 레벨 인터뷰는 총 2일간 진행되었으며, 나는 두 번째 날에 진행했기 때문에 첫 날은 재택을 했다...

[객체지향의사실과오해] 02 - 이상한 나라의 객체 [내부링크]

들어가기 전 본 책에서는 이상한 나라의 앨리스 이야기와 객체의 개념을 접목시켜 설명한다. 앨리스도 좋은 예제지만, 지난 시간에 소개했던 "고양이 스낵바" 게임에 맞춰서 이번 챕터도 풀어나갈 예정이다. ️ 객체의 행동과 상태 고양이 스낵바 게임에서, 각각의 냥냥이들은 코스튬을 입을 수 있다. 그리고 어떤 코스튬을 입는지에 따라서 얻을 수 있는 효과가 달라진다. 만약, 알바냥이 어흥 슈트를 입었다고 생각해보자. 알바냥은 어흥 슈트를 입음으로서 생산속도가 증가하게 된다. 알바냥의 기존 생산 속도는 10이라고 가정했을 때, 어흥 슈트를 입으면 생산 속도가 20이 되는 것이다. 이런 식으로 알바냥의 생산 속도는 어떤 코스튬을 입느냐에 따라서 달라진다. = 즉, 알바냥이 어떤 행동을 하는지에 따라서 알바냥의 ..

[이팩티브자바] 아이템 04. 인스턴스화를 막으려면 private 생성자를 사용하라 [내부링크]

이팩티브자바 아이템 4을 읽고 정리한 글입니다. ️ 유틸리티 클래스 인스턴스 메서드와 변수가 없이, 정적 메서드와 정적 변수만 제공하는 클래스를 의미한다. 개인적인 의견이지만, 유틸리티 클래스는 객체지향적 관점에서 봤을 때 좋다고는 보기 힘들 것 같다. 자바에서 제공하는 유틸리티 클래스 중에 대표적인 것들을 몇 가지 살펴보자. public class Arrays { private Arrays() {} ... } 위 코드는 java.util에 존재하는 Arrays 클래스이다. 이 클래스는 배열을 조작하기 위해 정렬이나 검색 등을 할 수 있는 다양한 정적 메서드들을 제공한다. (대부분의 메서드는 오버로딩되어 있어서 실제로 하는 역할은 검색, 복사, 채우기, 정렬... 등등이 있다) 유틸리티 클래스로 사..

[우테코 5기] 체스 게임 구현 미션 회고 [내부링크]

제나랑 함께한 네 번째 페어 프로그래밍이다. 미션을 진행할 당시에는 난이도가 확 뛴 느낌이라 어렵다는 생각, 그리고 시간이 너무 촉박하다는 생각뿐이었는데 다 끝나고 나서 돌아보니까 나름대로 잘 해낸 것 같다. (물론... 코드가 마음에 든다는 말은 아니다 c 정말 많이 부족하다...) 그래도 레벨 1 마지막 미션까지 어떻게든 온 내 자신이 대견하다! 앞으로도 힘내자 ️ 작성한 코드 GitHub - Cl8D/java-chess: 체스 게임 구현을 위한 저장소 체스 게임 구현을 위한 저장소. Contribute to Cl8D/java-chess development by creating an account on GitHub. github.com ️ 1차 PR [1, 2단계 - 체스] 져니(이지원) 미..

[객체지향의사실과오해] 01 - 협력하는 객체들의 공동체 [내부링크]

들어가기 전 객사오, 일명 토끼책이라고 불리는 책이다. 레벨 1이 끝나기 전에 읽고 싶었는데 그러질 못해서 방학 기간 동안 간단하게 읽고 정리해보았다. 객체지향에 대해 공부하기 전에는 ‘내가 왜 객체지향적으로 코드를 작성해야 하지…? 왜 캡슐화 이런 걸 지켜야 하지?’라는 생각을 많이 했었는데, 객체지향적 설계가 왜 코드의 유지보수성을 증가시키는지, 어떤 측면에서 좋은지 내 나름대로 머릿속에서 정의가 되는 것 같아서 재밌다. 자바 개발자로서 모든 설계의 기본은 객체지향에 대한 이해가 아닐까… 라는 생각이 들었다! 각 장에 대해서 내 나름의 견해를 담아 정리해보고자 한다. ️ 협력 관계 흔히 객체지향 세계를 말할 때 실세계를 모방하기 위함이라고 많이들 답한다. (나 역시 이 책을 읽기 전에 그랬다) ..

[이팩티브자바] 아이템 03. private 생성자나 열거 타입으로 싱글턴임을 보증하라 [내부링크]

이팩티브자바 아이템 3을 읽고 정리한 글입니다. ️ 싱글턴 인스턴스 인스턴스를 오직 하나만 생성할 수 있는 클래스. 메모리 낭비를 줄일 수 있고, 데이터를 공유할 수 있다. 다만, 결합도가 증가하며 클라이언트의 테스트가 어려워질 수 있다는 점이 존재한다. -> 인스턴스를 구현해서 만든 싱글턴이 아니라면, 싱글턴 인스턴스를 mock 객체로 대체하기가 힘들기 때문이다. 생성하는 방법 1. 생성자를 모두 private로 만들고, 인스턴스의 유일한 접근자를 public static으로 생성하기 public class Crew { public static final Crew INSTANCE = new Crew(); private Crew() { ... } public void hello() {...} }..

[우테코 5기] 블랙잭 구현 미션 회고 [내부링크]

지토랑 진행한 세 번째 페어 프로그래밍이다. 사실 끝난 지 한참 됐지만... 뒤늦게 회고를 작성해보고자 한다. 블랙잭부터 미션의 난이도가 확실히 까다로워졌다는 생각이 들었다... ㅎㅎ 그래도 배운 게 많아서 좋다. ️ 작성한 코드 GitHub - Cl8D/java-blackjack: 블랙잭 미션 저장소블랙잭 미션 저장소. Contribute to Cl8D/java-blackjack development by creating an account on GitHub.github.com ️ 1차 PR [1단계 - 블랙잭 게임 실행] 져니(이지원) 미션 제출합니다. by Cl8D · Pull Request #452 · woowacourse/java-b안녕하세요, 코일! 우테코 5기 백엔드 크루 져니입니다 ️..

[이팩티브자바] 아이템 02. 생성자에 매개변수가 많다면 빌더를 고려하라 [내부링크]

이팩티브자바 아이템 2을 읽고 정리한 글입니다. ️ 클래스에 멤버 변수가 많을 경우, 객체를 어떻게 생성할 수 있을까? - 생성자를 여러 종류로 두어서, 필요한 매개변수만을 사용하는 생성자 여러 개를 만들 수 있다 - 그러나, 이 방법은 필드가 늘어나면 그만큼 관리해야 하는 생성자가 많아지기 때문에 좋지 않다. - 또한, 매개변수로 전달하면 (인텔리제이의 파라미터 힌트를 사용하지 않는 이상) 각 값의 의미를 한눈에 알아보기가 힘들고, 버그가 발생할 확률이 높아질 수 있다. public class Crew { private String name; private int age; private String course; private String nickname; } 예시로, 크루에 대한 정보를 나타내는..

[우테코 5기] 사다리 타기 게임 미션 회고 [내부링크]

후추랑 진행한 두 번째 페어 프로그래밍인 사다리 미션이다. 사실 이번 미션은 굉장히 빨리 merge가 되어서 미션 자체에 많이 신경을 쓰지는 않았던 것 같은데, 다른 크루분들이 고민하시는 걸 보고 있으니 내가 너무 생각을 안 한 것인가... 라는 생각이 들었다 다음 미션에서는 조금 더 신경쓰면서 진행해야 할 것 같다. 그래도 후추 덕분에 도메인 설계를 굉장히 수월하게 해서, 더 빠르게 마무리 할 수 있었던 시간인 것 같다. (물론... 이 게시글을 작성한 시점에서는 한참 전에 끝난 미션이지만, 임시 저장을 해두고 올리지 않았어서...ㅎ 뒤늦게 올린다) ️ 작성한 코드 GitHub - Cl8D/java-ladder: 사다리타기 미션을 위한 저장소사다리타기 미션을 위한 저장소. Contribute to..

[Kotlin & Spring] Amazon S3 업로드 - 공통 에러 처리 핸들링, runCatching [내부링크]

정말 작은 역할이지만 조금씩 사이드 프로젝트를 진행하고 있는데, 코틀린 문법을 공부하면서 새로운 점을 알게 되어 기록하고자 한다! (코틀린... 익숙해지면 정말 편할 것 같지만 아직은 잘 모르겠다. 어렵다!) ️ Amazon S3 with Kotlin 코틀린과 s3를 연동하게 되면, 예기치 못한 서버 오류에 대비하여 파일을 삽입하거나 삭제할 때, 혹은 url 정보를 받아올 때 다음과 같이 Exception이 발생할 수 있게 된다. 한 가지 궁금한 점은, AmazonServiceException의 경우 부모 타입이 SdkClientException인데 왜 구분해두었을까... 아무튼, 기존에는 서버 에러에 대해 전혀 고려하지 않은 상태로 다음과 같은 코드를 작성하였었다. fun deleteFile(file..

[Java] Classic TDD vs Mockist TDD [내부링크]

얼마 전에 우테코에서 체스 피드백 2 강의를 들으면서, 디트로이트 학파 (classicist) vs 런던 학파 (Mockist)에 대해서 듣게 되었다. 둘 다 처음 들어본 용어여서 궁금한 마음에 이것저것 찾아보며 작성해보고자 한다. (전반적인 내용은 테코톡 발표 내용을 많이 참고하였습니다 ️) ️ 단위 테스트가 무엇일까? 단위 테스트는 다음과 같은 특징을 가져야 한다. 1. Low-level 테스트를 다루어야 한다. 2. 일반적인 테스트 도구를 사용해야 한다. 3. 빨라야 한다. 여기서 단위란 무엇일까? 만약, 기능 단위라고 구성된다면 객체지향의 관점에서는 해당 기능을 구현하는 클래스의 집합이 단위가 될 수도 있다. 우리는 이러한 단위 테스트를 진행하기 위해서, 어떠한 단위가 상호 작용할 수 있는..

[이팩티브자바] 아이템 78. 공유 중인 가변 데이터는 동기화해 사용하라 (1) [내부링크]

이팩티브자바 아이템 78을 읽고 정리한 글입니다. 이번 정리는 책과는 다소 다른 내용입니다 :D 개념 자체가 어려운 부분이어서 책을 읽으며 궁금한 부분에 대해 조사하는 식으로 작성하였습니다 ️ 두 편으로 나누어서 포스팅 할 예정입니다! 아직 미흡한 점이 많아서, 더 정확한 정보를 알게 되면 본 게시글을 수정할 예정입니다. ️ 동기화란 무엇일까? 현재 잔액이 10000원이고, 각각 1000원씩 입금하는 행위를 5000번, 1000원씩 출금하는 행위를 5000번 반복한다고 가정해보자. 동일한 금액에 대해 동일한 횟수로 5000번씩 진행했기 때문에, 우리의 잔액에는 변화가 없다고 생각할 수 있다. [synchronized 키워드 붙이기 전] public class Main { public stati..

[이팩티브자바] 아이템 09. 리소스의 사용과 해제 : try-finally보다는 try-with-resources를 사용하라 [내부링크]

이팩티브자바 챕터 9를 읽고 정리한 글입니다. ️ 리소스는 어떻게 얻을 수 있을까? 흔히 자바에서는 리소스를 사용한 다음, catch를 통해 리소스를 사용하다 발생한 예외를 처리하고, finally에서 close()를 사용하여 직접 닫아주는 경우가 많다. (try-catch-finally) 이때, 닫아주지 않으면 클라이언트는 예기치 못한 성능 문제를 발견할 수도 있다. 오라클 문서를 발췌해보면, 다음과 같은 문장이 존재한다. The typical Java application manipulates several types of resources such as files, streams, sockets, and database connections. Such resources must be handl..

[Java] ConcurrentModificationException은 언제 발생할까? iterator의 동작 원리 살펴보기 [내부링크]

모던 자바를 공부하는 도중에, 책에서 나왔던 예제를 커스텀 하려다가 이런 상황을 만났다. ️ 문제 상황 먼저, 사용한 크루 클래스에 대한 정보이다. public class Crew { private String name; private String nickname; private int age; private Course course; private Crew() { // 외부에서 인스턴스화 막기 } public static Crew createByName(final String name, final int age, final Course course) { Crew crew = new Crew(); crew.name = name; crew.age = age; crew.course = course; r..

[Java] 문자열 - String pool과 String concatenation [내부링크]

우테코에서 문자열 관련 수업을 듣다가, 이것저것 궁금해서 찾아봤는데 블로그 글로 작성하면 좋을 것 같아서 이렇게 작성한다 c 의식의 흐름대로 궁금한 점들을 찾아본 거여서 상당히 두서가 없을 것 같다 c ️ String과 String pool String은 문자열을 저장하고 처리하는 클래스이다. 불변 클래스이기 때문에, 한 번 생성되면 변경이 불가능하다. 또한, final 클래스로 되어 있기 때문에 상속이 불가능하다. UTF-16 인코딩을 활용하여, 인코딩된 문자열을 저장하기 때문에 각 문자를 2바이트 (=16비트) 유니코드 문자로 표현한다. public String(int[] codePoints, int offset, int count) { checkBoundsOffCount(offset, count,..

[이팩티브자바] 아이템 01. 생성자 대신 정적 팩터리 메서드를 고려하라 [내부링크]

이팩티브자바 챕터 1을 읽고 정리한 글입니다. ️ 정적 팩터리 메서드란? 우테코 미션을 진행하면서, 정적 팩터리 메서드를 정말 많이 사용하였다. 정적 팩터리 메서드란, 클래스의 인스턴스를 반환하는 정적 메서드이다. 즉, 생성자 역할을 하면서도 객체를 생성하기 전에 1차적으로 통과하는 '문' 같은 존재라고도 볼 수 있다. 정적 팩터리 메서드를 사용하면 어떤 점이 좋을까? 동일한 시그니처라도, 이름에 따라 새롭게 생성해줄 수 있다. 어느 날, 우테코에 크루 신청을 하기 위해 신청서를 작성하고 있었다. 이때, 닉네임을 아직 정하지 못한 크루는 이름과 나이, 그리고 과정만을 가지고 크루를 신청하고 싶었다. public class Crew { private String name; private Strin..

[모던자바인액션] 람다 표현식 : 익명 함수를 간결하게 만들기 [내부링크]

모던 자바 인 액션 챕터 3을 읽고 정리한 글입니다. ️ 람다가 뭔데요? 지난 챕터에서는 동작 파라미터화를 통해서 파라미터로 메서드의 동작 자체를 전달해주는 것을 배웠다. 이때, 메서드의 동작을 전달하기 위해서 별도의 @Override 어노테이션이나 상속된 메서드 이름 등, 동작 외에 다른 코드들이 반복되어 상당히 불편했다. 람다 표현식은 이를 해결하기 위해서, 단순히 '동작에 대한 코드만' 메서드로 전달할 수 있도록 익명 함수를 단순화한 것이다. 람다 표현식은 다음과 같은 특징을 가진다. 메서드에 이름이 없으니까 “익명”이다. (메서드에 대한 네이밍을 고민할 필요가 없다!) - 이름은 없지만, 파라미터 리스트와 바디, 반환 형식, 발생 가능한 예외 리스트는 가질 수 있다. 함수 : 특정 클..

[모던자바인액션] 동작 파라미터화 : 동작 자체를 전달해보자! [내부링크]

모던 자바 인 액션 챕터 2을 읽고 정리한 글입니다. ️ 동작 파라미터화 사람의 마음은 정말 갈대 같다. 그리고, 요구사항은 소비자의 입장에서 늘 생각하게 된다. 우리는 코드를 짜는 프로그래머지만, 갈대 같은 소비자의 마음을 만족시키기 위해 최대한 유동적으로 대응할 필요가 있다. 어느 날, 포비가 우테코 공지사항에 다음과 같은 요구사항을 던져주었다고 가정하자. 백엔드 크루 중에 25살 이하인 크루만 보고 싶은데, 모여 주세요. 그러자 네오가 와서 말했다. 아니에요, 프론트엔드 크루 중에서 23살 이상인 크루만 와주세요. 어떻게 하면 우리는 변화하는 요구사항 속에서 유동적으로 대응할 수 있을까? 가장 먼저, 그냥 요구사항에 맞도록 가능한 모든 속성에 대해서 전부 시도하는 방법이 있다. 1) 백..

[모던자바인액션] 자바 8로 오면서 생긴 일 [내부링크]

모던 자바 인 액션 챕터 1을 읽고 정리한 글입니다. ️ 자바 함수 자바에서 흔히 '함수', 그리고 '메서드'라는 이름을 많이 들을 수 있다. 스터디에서 크루분이 함수와 메서드에 대해서 정의를 해주셨는데, 크게 다음과 같이 생각할 수 있다. 단순한 프로그래밍 언어에서 '함수'는 '메서드'와 동일한 의미로 쓰일 수 있으며, 특히 static method에 대해서 같은 의미로 사용된다. 그러나, 자바에서 함수는 '수학적인 함수'로, 부작용을 일으키지 않는 함수를 말할 수 있다. 그 외에 함수는 '독립적으로 존재하며, 하나의 기능을 구현하도록 구성한 것'이며, 메서드는 '클래스 내부에 정의되어, 객체의 속성을 다루기 위한 행위'라고도 하는데 독립적인지, 종속적인지에 따른다고 볼 수 있다. ️ 일급 객체..

[Kotlin] 코틀린의 변수와 타입 [내부링크]

핵심만 골라배우는 코틀린 프로그래밍 정리 : 기본적으로 자바와 겹치는 부분을 제외하고, 간단한 문법들만 정리하고자 한다. ️ 코틀린의 특징 - JVM에서 실행되기 때문에 자바와 호환성이 높다. - 정적 타입 언어이기 때문에, 모든 타입은 컴파일 시점에서 알 수 있다. - 타입 추론 기능을 통해 변수 선언 시 변수의 타입을 명시적으로 지정하지 않아도 처리할 수 있다. - 객체지향 프로그래밍을 지원한다. - 함수형 프로그래밍을 지원하기 때문에, 다양한 함수와 람다식을 지원한다. - 지역 함수 (함수 내부에 다른 함수 선언) - 멤버 함수 (클래스 내부에 함수를 선언 = 자바의 메서드) - 제네릭 함수 (함수에 제네릭 타입 사용) - 고차 함수 (다른 함수를 인자로 받아 실행) - 재귀 함수 (재귀 호..

[우테코 5기] 자동차 경주 게임 회고 [내부링크]

자동차 경주 게임은 저번 주에 끝났지만... 새로운 미션에 적응하느라 이제서야 회고를 작성한다... c 준팍이랑 진행한 첫 페어프로그래밍이다. 하나의 노트북으로 같이 코딩하는 건 처음 해보는 경험이라 색달랐다. 지금 와서 느끼는 거지만, 혼자 코딩할 때보다 시간은 더 걸려도 페어에게 부끄럽지 않은 코드를 작성하기 위해서 더 좋은 방향으로 설계하기 위해서 의식적으로 노력하게 되는 것 같다. 회고를 어떻게 작성할까 고민했는데, 코드는 단계별로 branch가 나뉘어져 있고, 기능 목록도 더 상세하게 작성되어 있기 때문에 코드에 대한 설명보다는 어떤 식으로 문제를 해결했는지 적는 게 더 좋을 것 같아서 그렇게 적어보려고 한다 :D ️ 작성한 코드 GitHub - Cl8D/java-racingcar: 자동차 경..

[TDD] 자바 테스트 코드, 단위 테스트, 테스트하기 어려운 부분 (feat. 자동차 경주 게임) [내부링크]

우테코 수업 들었던 내용 중에서 간단하게 내 생각을 정리하고 싶어서 작성하는 글! 테스트 코드의 범위 테스트 코드는 어느 정도로 작게 만들어야 될까 고민을 많이 했다. 사실 이전에는 테스트 코드를 거의 작성한 경험도 없고, given-when-then만 구구절절 알고 있었어서 테스트 코드의 범위까지도 제대로 생각해 본 적 없었다. (와 진짜 자랑이다!) 개인적인 생각으로 테스트 코드는 해당 객체의 public 메서드에 대해서는 전부 테스트를 하는 게 맞다고 생각한다. 물론, private 메서드는 public에서 호출해서 간접적으로 테스트 할 수 있도록 만드는 것이 좋다고 생각한다. 초반에 페어 프로그래밍을 진행할 때, private 메서드를 테스트하려고 리플랙션까지 써가면서 진행했다. 우선, Car..

[우테코 5기] 1주차 회고록 - 연극, 자동차 경주 게임 구현하기 [내부링크]

- 우테코 시작한 지 벌써 2주차가 됐다. 1주차 회고록을 주말에 쓰려고 했는데 미션하느라 이제서야... c 매주 일기 형식으로 간단하게 우테코에서 있었던 일을 써보려고 한다. 개발에 관련된 거는 개별 포스팅으로 쓸 예정 :D 2월 7일 - 우테코 첫날! 잠실 캠퍼스 들어가는데 뭔가 엄청 두근거렸다. 이 날은 온보딩 조를 간단한 오리엔테이션을 진행했는데, 온보딩 조를 만나게 되었다. 우리 조는 준팍, 홍실, 로지, 블랙캣, 에단이었다. (진짜 팀 잘 만났다...) 출입증을 받기 위해서는 조를 만났어야 했는데, 누가 누군지 몰라서 처음에 찾을 때 엄청 헤맸다. 그래도 준팍이 먼저 연락해 주신 덕분에 우리 조와 겨우 합류할 수 있었다! 그리고 점심 식사도 같이 했다. 어딜 가든 사람이 많아서 쉑쉑버거..

[우아한테크코스] 우테코 5기 백엔드 합격, 합격까지의 기록 [내부링크]

- 사실 우테코 합격 발표는 꽤 전에 났지만, 미루다가 겨우 회고록을 작성한다. 우테코 합격이라니... 다시 봐도 감격스러운 메일이다. c 우테코 시작하면 블로그 작성에 습관을 들일 예정이어서, 시작 전에 간단하게 어떤 과정을 거쳤는지 기록해보고자 한다. | 1. 자기소개서 - 사실 우테코는 자기소개서가 꽤나 중요한 부분이라고 생각한다. '내가 얼마나 성장할 수 있는 사람인가?'에 초점을 두고, 전공 지식보다는 내 진솔한 경험을 담으려고 많이 노력했다. 1. 고등학교/대학교 전공을 포함하여 프로그래밍 교육 이력을 작성해주세요. - 현재 재학 중인 대학교와, 대학교 내에서 진행한 소모임 (백엔드 관련 X), 그리고 백엔드 관련 공부 중이라고 작성했다. 굳이 글로 풀어쓰지 않고, 그냥 3줄로 짤막하게 작성했..

[우아한테크코스] 5기 백엔드 3주차 프리코스 회고록 [내부링크]

- 벌써 3주차가 끝났다. 사실 끝난 지 이틀 됐는데 정신 없어서 이제 회고록을 작성한다... | 2주차 회고록 [우아한테크코스] 5기 백엔드 2주차 프리코스 회고록 - 벌써 2주차 마무리...? 시간이 너무 빨라서 믿기지 않는다. 오늘 하루 회고랑 함께 쉬면서 다시 3주차 달릴 준비해야지... | 1주차 회고록 [우아한테크코스] 5기 백엔드 1주차 프리코스 회 cl8d.tistory.com | 3주차 코드 GitHub - Cl8D/java-lotto: 로또 미션을 진행하는 저장소 로또 미션을 진행하는 저장소. Contribute to Cl8D/java-lotto development by creating an account on GitHub. github.com | 3주차 커밋 기록 살펴보기 - ..

[우아한테크코스] 5기 백엔드 2주차 프리코스 회고록 [내부링크]

- 벌써 2주차 마무리...? 시간이 너무 빨라서 믿기지 않는다. 오늘 하루 회고랑 함께 쉬면서 다시 3주차 달릴 준비해야지... | 1주차 회고록 [우아한테크코스] 5기 백엔드 1주차 프리코스 회고록 - 2주차가 끝나서야 작성하는 1주차 프리코스 회고록...(?) - 1주차에는 정신없이 구현하고 커밋하고 리팩토링하고 그러느라 한 주가 가는지도 모르게 끝났던 것 같다. 다른 분들이 매주 회고록을 cl8d.tistory.com | 2주차 코드 GitHub - Cl8D/java-baseball: 숫자 야구 게임 미션을 진행하는 저장소 숫자 야구 게임 미션을 진행하는 저장소. Contribute to Cl8D/java-baseball development by creating an account on G..

[우아한테크코스] 5기 백엔드 1주차 프리코스 회고록 [내부링크]

- 2주차가 끝나서야 작성하는 1주차 프리코스 회고록...(?) - 1주차에는 정신없이 구현하고 커밋하고 리팩토링하고 그러느라 한 주가 가는지도 모르게 끝났던 것 같다. 다른 분들이 매주 회고록을 작성하시는 게 꽤 멋있어 보이기도 했고, 개인적으로 여름/겨울마다 회고록을 작성하고 있었어서 우테코 참여 기간 동안에 나도 회고록을 남겨보고자 한다 :D 코드 짜면서 너무 배우는 점이 많아서 기쁘다. - 1주차 과제 코드는 아래에서! https://github.com/Cl8D/java-onboarding/tree/cl8d GitHub - Cl8D/java-onboarding: 온보딩 미션을 진행하는 저장소 온보딩 미션을 진행하는 저장소. Contribute to Cl8D/java-onboarding develo..

[ReactiveProgramming] Iterable, Iterator와 Observer Pattern [내부링크]

- 토비의 '스프링 리액티브 프로그래밍' 강의를 듣고 정리한 글입니다. - 전체 소스코드) https://github.com/Cl8D/SpringReactive GitHub - Cl8D/SpringReactive: Spring Reactive Programming 학습 용도 레파지토리입니다. Spring Reactive Programming 학습 용도 레파지토리입니다. Contribute to Cl8D/SpringReactive development by creating an account on GitHub. github.com ️ Iterable / Iterator package chapter1; import java.util.Iterator; public class Basic { public sta..

[JPA] @BatchSize를 지정했으나 쿼리가 이상하게 나갈 때 [내부링크]

- 지난 9월에, 회사에서 사이드 프로젝트로 JPA를 활용한 게시판 서비스 개발을 진행했었는데, 쿼리 튜닝을 진행하다가 내 마음대로 쿼리가 나가지 않는 걸 볼 수 있었다. - 당시 모델의 구조는 대략적으로 이렇다. 기본적인 게시판 엔티티이다. @Table(name = "tb_board") @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Board extends BaseEntity { @Schema(description = "게시글 번호", required = true) @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long boardNo; @S..

[MariaDB] Homebrew - MariaDB 설치 시 오류 발생했을 때 (Can't connect to local server through socket '/tmp/mysql.sock') [내부링크]

- 한창 맥북에 프로그램 설치하다가 발생했던 문제였는데, 한 번쯤은 정리하면 좋을 것 같아서 정리해두는 글. - 당시 상황을 캡쳐해두지 않아서 스크린샷은 없지만, 발생했던 문제는 다음과 같다. mariadb Can't connect to local server through socket '/tmp/mysql.sock' (2) [전반적인 상황] - 1차적으로 mysql을 설치한 뒤, mariadb를 설치하고 싶었던 상황 - mysql 삭제 > mariadb 설치 > 무언가 오류 발생 > 재설치 해야지~ > 재설치 했더니 오류생김 > ??? - 당시에 구글링을 엄청 해봤었는데 안 나와서 절망하다가... 겨우 해결했다. - brew uninstall mariadb : 먼저, mariadb를 삭제한다. (mys..

[Java] Method Naming Convention [내부링크]

- 개인적으로 개발을 진행하면서 DTO 단의 메서드 이름을 지을 때 of를 아무 생각 없이 사용하고는 했었는데, Orcale 공식 문서에서 자바의 메서드 네이밍 컨벤션에 관한 글이 있는 걸 확인해서... 간단하게 정리해놓고자 한다. Method Naming Conventions (The Java Tutorials > Date Time > Date-Time Overview) The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no..

[Kotlin] 코틀린 기본 문법 정리 - Data Class, Companion Object, lateInit, val vs var [내부링크]

- 코틀린 공부하면서 문법적으로 너무 부족하다고 생각이 들어서 몇 가지 특징들을 정리해보았다. ️ Kotlin Data class 데이터의 보관 목적으로 만들 수 있는 클래스. 자동으로 toString(), hashCode(), equals(), copy() 메서드를 생성해준다. 특징 데이터 클래스의 생성자는 1개 이상의 프로퍼티를 선언해야 한다. 데이터 클래스의 생성자 프로퍼티는 val 또는 var으로 선언해야 한다. 데이터 클래스에 abstract, open, sealed, inner 를 붙일 수 없다. 클래스에서 toString(), hashCode(), equals(), copy()를 override하면, 그 함수는 구현된 코드를 사용하게 된다. 데이터 클래스는 상속 불가능하다. toString..

[MSA] MicroService, SoA [내부링크]

- MSA 공부하면서 인프라적 지식이 부족한 것 같아서 개념 정리를 진행하였다. - 아마 조금 더 공부하면서 작성해나가야 될 것 같다. ️ SoA (Service Oriented Architecture) 서비스 지향 아키텍처 애플리케이션 컴포넌트 기반, 각 컴포넌트는 일종의 개별 서비스로 구성 애플리케이션을 3개의 레이어로 나누었을 경우 프레젠테이션 레이어 사용자 UI 제공 비즈니스 레이어 비즈니스 로직 구현 데이터 레이어 도메인 모델 관리 및 DB 접근 결국, 각 서비스는 일종의 비즈니스 로직의 구현체라고 볼 수 있다. 서비스 단위로 개발을 진행하여 개발된 서비스를 공유하여 재가용성을 늘리는 것. -- ️ MicroService with SoA 마이크로 서비스에서 각 서비스들은 완전히 분리되어 있기..

[Spring] 서블릿 필터, 스프링 인터셉터, 어노테이션으로 로그인 검증하기 [내부링크]

김영한 님의 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술'을 보고 정리한 글입니다 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있 www.inflearn.com 지난 포스팅과 이어집니다 :D [Spring] 상품 관리 시스템에 회원가입 / 로그인 처리 로직 추가하기, 쿠키를 통한 식별 처리 김영한 님의 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술'을 보고 정리한 글입니다 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의 웹 애플리케이션 개발에 필..

[Spring] 상품 관리 시스템에 세션으로 로그인 처리하기 [내부링크]

김영한 님의 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술'을 보고 정리한 글입니다 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있 www.inflearn.com - 지난 포스팅과 이어집니다 :D [Spring] 상품 관리 시스템에 회원가입 / 로그인 처리 로직 추가하기, 쿠키를 통한 식별 처리 김영한 님의 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술'을 보고 정리한 글입니다 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의 웹 애플리케이션 개발에..

[Spring] 상품 관리 시스템에 회원가입 / 로그인 처리 로직 추가하기, 쿠키를 통한 식별 처리 [내부링크]

김영한 님의 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술'을 보고 정리한 글입니다 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있 www.inflearn.com - 지난 포스팅과 이어집니다 :D [Spring] Bean Validation - 어노테이션을 통해 검증 진행하기 김영한 님의 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술'을 보고 정리한 글입니다 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의 웹 애플리케이션 개발에 필요한 모든 웹 기..

[Spring] Bean Validation - 어노테이션을 통해 검증 진행하기 [내부링크]

김영한 님의 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술'을 보고 정리한 글입니다 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있 www.inflearn.com - 지난 포스팅과 이어집니다 :D [Spring] BindingResult를 활용해서 검증 로직 추가하기, MessageCodesResolver 알아보기 김영한 님의 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술'을 보고 정리한 글입니다 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의 웹..

[Spring] BindingResult를 활용해서 검증 로직 추가하기, MessageCodesResolver 알아보기 [내부링크]

김영한 님의 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술'을 보고 정리한 글입니다 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있 www.inflearn.com - 지난 포스팅과 이어집니다 :D [Spring] 메시지와 국제화를 통해 언어 설정 커스텀하기 김영한 님의 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술'을 보고 정리한 글입니다 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의 웹 애플리케이션 개발에 필요한 모든 웹 기술을 cl8d.tis..

[Spring] 메시지와 국제화를 통해 언어 설정 커스텀하기 [내부링크]

김영한 님의 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술'을 보고 정리한 글입니다 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있 www.inflearn.com - 지난 포스팅과 이어집니다 :D [Spring] Thymeleaf를 사용해서 상품 등록/수정/조회 구현하기 김영한 님의 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술'을 보고 정리한 글입니다 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의 웹 애플리케이션 개발에 필요한 모든 웹 기술을 ..

[Spring] Thymeleaf를 사용해서 상품 등록/수정/조회 구현하기 [내부링크]

김영한 님의 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술'을 보고 정리한 글입니다 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있 www.inflearn.com - 지난 포스팅과 이어집니다 :D [Spring] Thymeleaf 기본 문법 정리 김영한 님의 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술'을 보고 정리한 글입니다 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의 웹 애플리케이션 개발에 필요한 모든 웹 기술을 cl8d.tistory.c..

[Spring] MVC 패턴이란, V1~V5로 MVC 프레임워크 만들기 [내부링크]

- 김영한 님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술'을 보고 정리한 글입니다 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - www.inflearn.com - 지난 포스팅과 이어집니다 :D [Spring] 서블릿이란? HttpServletRequest, HttpServletResponse - 김영한 님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술'을 보고 정리한 글입니다 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의 웹 애플리케이션을 개..

[Spring] Thymeleaf 기본 문법 정리 [내부링크]

김영한 님의 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술'을 보고 정리한 글입니다 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있 www.inflearn.com | 타임리프 문법 알아보기 - SSR에서 많이 사용하는 타임리프의 기본 문법에 대해서 알아보자. - 프로젝트 dependency에는 다음을 추가해주었다. : Spring Web, Lombok, Thymeleaf - 타임리프의 경우 '네츄럴 템플릿'이라는 특징이 있다. : HTML을 그대로 유지하기 때문에 웹 브라우저에..

[Spring] thymeleaf, bootstrap을 통해 기본 상품 저장 웹 사이트 만들기 [내부링크]

김영한 님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술'을 보고 정리한 글입니다 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - www.inflearn.com - 지난 포스팅과 이어집니다 :D [Spring] HTTP 요청 파라미터, 응답 데이터 생성, HttpMessageConverter와 ArgumentResolver - 김영한 님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술'을 보고 정리한 글입니다 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 |..

[Spring] HTTP 요청 파라미터, 응답 데이터 생성, HttpMessageConverter와 ArgumentResolver [내부링크]

- 김영한 님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술'을 보고 정리한 글입니다 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - www.inflearn.com - 지난 포스팅과 이어집니다 :D [Spring] DispatcherServlet의 동작 과정과 HanderMapping, HandlerAdapter, @RequestMapping - 김영한 님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술'을 보고 정리한 글입니다 스프링 MVC 1편 - 백엔드 웹 개발 핵심..

[Spring] DispatcherServlet의 동작 과정과 HanderMapping, HandlerAdapter, @RequestMapping [내부링크]

- 김영한 님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술'을 보고 정리한 글입니다 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - www.inflearn.com - 지난 포스팅과 이어집니다 :D [Spring] MVC 패턴이란, V1~V5로 MVC 프레임워크 만들기 - 김영한 님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술'을 보고 정리한 글입니다 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의 웹 애플리케이션을 개발할 때 필요한 모든 웹 기 ..

[Spring] 서블릿이란? HttpServletRequest, HttpServletResponse [내부링크]

- 김영한 님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술'을 보고 정리한 글입니다 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - www.inflearn.com - 지난 포스팅과 이어집니다 :D [Spring] WAS, 서블릿, 멀티 스레드와 스레드 풀 - 김영한 님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술'을 보고 정리한 글입니다 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의 웹 애플리케이션을 개발할 때 필요한 모든 웹 기 cl8d.ti..

[Spring] WAS, 서블릿, 멀티 스레드와 스레드 풀 [내부링크]

- 김영한 님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술'을 보고 정리한 글입니다 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - www.inflearn.com | 웹 애플리케이션이란? - 웹은 기본적으로 HTTP를 기반으로 통신을 한다. 웹 서버 → HTTP 기반으로 동작 → 정적 리소스 제공 및 기타 부가 기능 → 정적 (파일) HTML, CSS, JS, 이미지 영상을 파일을 두면, 서버가 해당 파일을 서빙함. ex) NGINX, APACHE 웹 어플리케이션 서버 -..

[Spring] 빈 생명주기 콜백, 빈 스코프 [내부링크]

- 김영한 님의 '스프링 핵심원리 - 기본편'을 보고 정리한 글입니다 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com - 지난 포스팅과 이어집니다 :D [Spring] 컴포넌트 스캔과 의존관계 자동 주입 - 김영한 님의 '스프링 핵심원리 - 기본편'을 보고 정리한 글입니다 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 cl8d.tistory.com - 스프링 핵심원리 강의의 마지막 정리가 될 것 같습니다 c | 빈 생명주기 콜백 - DB 커넥션 풀 같..

[Spring] 컴포넌트 스캔과 의존관계 자동 주입 [내부링크]

- 김영한 님의 '스프링 핵심원리 - 기본편'을 보고 정리한 글입니다 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com - 지난 포스팅과 이어집니다 :D [Spring] 스프링을 이용해 회원-주문 서비스 개발, 스프링 컨테이너와 싱글톤 - 김영한 님의 '스프링 핵심원리 - 기본편'을 보고 정리한 글입니다 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 cl8d.tistory.com | 컴포넌트 스캔 - 지난 포스팅까지 우리는 AppConfig라는 설정 정..

[Spring] 스프링을 이용해 회원-주문 서비스 개발, 스프링 컨테이너와 싱글톤 [내부링크]

- 김영한 님의 '스프링 핵심원리 - 기본편'을 보고 정리한 글입니다 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com - 지난 포스팅과 이어집니다 :D [Spring] 순수 자바로 회원-주문 서비스 개발하기 - 김영한 님의 '스프링 핵심원리 - 기본편'을 보고 정리한 글입니다 https://inf.run/nitp 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 cl8d.tistory.com - 지난 포스팅에서, 순수 자바만을 이용해 회원 - 주문, 그리고 할인 서비스를 ..

[Spring] 순수 자바로 회원-주문 서비스 개발하기 [내부링크]

- 김영한 님의 '스프링 핵심원리 - 기본편'을 보고 정리한 글입니다 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com | 기본 설계 - 기본적으로 인터페이스-클래스 형태로 설계하기. - 물론, 실무에서 변경 가능성이 없는 경우에는 바로 클래스로 들어가도 좋다. 지금은 연습이니까! - 회원은 id, 이름, 등급 정보를 가지고 있다. - 이때, 등급 정보는 BASIC / VIP 유저로 나누어져 있다. - 회원 서비스는 다음과 같은 기능을 제공한다. - 회원가입 - 회원 조회 - 회원 저장소는 메모리 저장소, DB 저장소, 외부 시스템..

[Spring] 스프링이란? [내부링크]

- 김영한 님의 '스프링 핵심원리 - 기본편'을 보고 정리한 글입니다 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com | 스프링이란? - 자바 기반의 언어 프레임워크 - 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크 | 객체지향이란? - 객체 지향의 기본 4가지 특성 추상화 캡슐화 상속 다형성 - 객체는 메시지를 주고받고 데이터를 처리할 수 있으며, 프로그램을 유용하고 변경이 용이하게 만든다! - 유연하고, 변경에 용이하다. | 그렇다면, 다형성이란 무엇일까? - 세상을 역할과 구현으로 분리해보자..