프로젝트에서 CRUD 로직을 리팩토링하면서 URI에 대한 고민을 하게 되었습니다.고민하면서 제대로 URI 규칙에 대해서 알아야겠다는 생각에 글을 쓰게 되었습니다. URI인터넷 자원을 나타내는 고유 식별자이다. URI의 I는 Identifier로 인터넷 자료의 ID를 뜻하는 것이다.이는 자료 간 URI는 유일해야한다는 것이다. 규칙#1 URI 마지막에 '/'가 포함되면 안된다.URI 경로의 마지막에 있는 슬래시(/)는 의미를 더하지 않으며 혼란을 초래할 수 있으므로, 이를 사용하는 것은 중요한 규칙 중 하나입니다.따라서 URI 마지막에 '/'를 붙이면 안된다.예를 들어 http://api.test.com/test/ 와 http://api.test.com/test 있다고 했을 때 웹 컴포넌트와 프레임워크..
Back-End
Kafka로 채팅을 구현하기 앞서 Kafka에 대해서 공부하기 위해 Kafka를 간단하게 연동해보는 실습을 해보겠습니다.Kafka 란?파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션을 위해 설계된 고성능 분산 이벤트 스트리밍 플랫폼이다. pub/sub 모델의 메시지 큐 형태로 동작하며 분산환경에 특화되어있다.큐잉 모델브로커(서버) 안에 메시지 큐가 존재한다.producer는 큐로 메시지를 보내고, consumer가 큐에서 메시지를 추출한다.하나의 큐에 여러개 컨슈머가 접근할 수 있어서 병렬 처리가 가능하다.하나의 메시지는 하나의 Consumer에서만 처리된다.pub/sub 모델producer를 publisher, consumer를 subscriber로 명명한다.publisher가 ..
SW마에스트로에서 개발할 프로젝트에 멀티 모듈을 적용할지 고민이 생겼습니다. 이번에는 멀티모듈에 대해서 간단하게 알아보는 글을 작성하고자 합니다. 먼저 모듈이란? 모듈은 프로그램을 기능 별로 분할한 논리적인 일부분이다. 여러 기능을 모아둔 코드 조각이라고 이해하면 될 듯하다. 자바에서 모듈은 독립적으로 배포될 수 있는 코드의 단위이다. 그래서 멀티 모듈이란? 멀티모듈은 쉽게 여러개의 모듈을 구성한 것으로 보면 되는 데 여기서, 멀티모듈을 만든다는 것은 상호 연결된 여러개의 모듈로 구성된 프로젝트를 의미한다. 멀티 모듈을 사용하는 이유! 단일 모듈의 한계 서로 다른 프로젝트에서 공통된 코드가 사용된다면, 코드를 복붙해서 사용해야한다. 즉 중복이 발생될 수 있다. 여러 프로젝트를 사용하기 위해 IDE, 인스..
백엔드 개발을 하면 HTTP 상태 코드에 대해서 많이 접하게 되는데, HTTP 상태 코드에 대해서 알고 사용하면 더 나은 코드를 작성할 수 있을 것이라고 생각해서 글을 써보았습니다. (오타 발견시 댓글 부탁드립니다.) HTTP Status Code 클라이언트가 보낸 HTTP 요청에 대해서 서버의 응답 코드입니다. 상태 코드에 따라 요청의 성공/실패 여부를 세 자릿수로 구분합니다. 대략 적인 구성으로 1XX: 임시 응답으로 현재 클라이언트의 요청까지는 처리되었으니 계속 진행 2XX: 요청 정상 처리 3XX: 요청을 완료하려면 추가 행동이 필요 4XX: 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음 5XX: 서버 오류, 서버가 정상 요청을 처리하지 못함 로 볼 수 있습니다. 이제 상태 ..
JAR? WAR?? 기본적으로 JAR, WAR 모두 Java의 jar 옵션을 이용해 생성된 압축(아카이브) 파일로, 애플리케이션을 쉽게 배포하고 동작시킬 수 있도록 관련 파일(리소스, 속성 파일 등)을 패키징 한 것이다. JAR (Java Archive) JAR는 패키지 파일 형식으로 .jar 확장자를 가지며 라이브러리, 리소스 및 메타데이터 파일을 포함할 수 있다. Java 애플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일 Class (Java 리소스, 속성 파일), 라이브러리 파일을 포함함 JRE (Java Runtime Environment)만 있어도 실행 가능함 (java -jar 프로젝트명.jar) WAR (Web Application Archive) WAR는 웹 애플리케이션 아카이브..
김영한님 스프링 강의를 수강하면서 build.gradle 설정을 하는데 implement와 compileOnly 등 gradle 의존성 옵션에 대해서 궁금증이 생겨서 글을 작성하게 되었습니다. 간단하게 쓴 글로 자세한 내용은 아래 첨부된 docs 및 블로그 참고하시면 됩니다. Gradle Dependency Configuration 초록색 사용자가 의존성을 선언할 때 사용한다. implementation runtimeOnly compileOnly compileOnlyApi api 분홍색 구성요소가 라이브러리를 컴파일하거나 실행할 때 사용한다. apiElements 라이브러리 컴파일(compile) 해당 라이브러리를 컴파일하는 데 필요한 모든 요소를 검색할 때 사용한다. default 설정과 다르게, im..
동작 원리 DispatcherServlet이 브라우저로부터 요청을 받는다. DispatcherServlet은 요청된 URL을 HandlerMapping 객체에 넘기고, HandlerMapping에서 요청된 URL에 따라 각각 어떤 Controller가 실제로 처리할 것인지 찾는다. 다시 DispatcherServlet에 돌아와서 HandlerAdapter에게 요청을 보낸다. HandlerAdapter는 컨트롤러의 methods 중 요청에 맞는 적합한 method 매칭한다. 컨트롤러 실행 결과를 ModelAndView 객체 타입으로 리턴한다. 컨트롤러의 요청 처리 결과를 ModelAndView로 받으면 DispatcherServlet은 결과를 보여줄 뷰 객체를 검색하기 위해 ViewResolver 빈 객체..
자바 스프링으로 백엔드 공부를 하다가 문득 스프링을 왜 사용하는 가에 대한 궁금증이 생겨서 글을 쓰게 되었다. 스프링 이란? 스프링은 엔터프라이즈용 JAVA 애플리케이션 개발을 편하게 할 수 있게 해주는 오픈소스 경량급 애플리케이션 프레임워크이다. 스프링 특징 우선, 자바 스프링의 특징을 알아보자. 아래 특징들 덕분에 자바 스프링을 활용했을 때 이점을 볼 수 있다. 1. POJO(Plain Old Java Object)기반의 구성 코드를 개발할때, 개발자가 특정한 라이브러리나 컨테이너 기술에 종속적이지 않음을 의미한다. 이는 Java코드를 이용해서 객체를 구성하는 방식 그대로 스프링에서 사용 가능하다는 것이다. 이를 통해 객체지향적 설계가 가능하다. 2. DI(Dependency Injection)을 통..