Gradle >Gradle이란, 빌드 자동화 시스템이며 우리가 작성한 자바 코드를 설정에 맞게 자동으로 Build해줍니다. build.gradle gradle 기반의 빌드 스크립트이며 소스 코드를 빌드하고 라이브러리들의 의존성을 쉽게 관리할 수 있습니다. 개발을 하면서 필요로하는 외부 라이브러리들을 dependencies 부분에 작성하면 Gradle이 ...
Client 클라이언트는 서버의 서비스를 받아 사용하는 장치, 프로그램을 의미합니다 Server 서버는 네트워크를 통해 클라이언트에게 서비스를 제공하는 시스템입니다. 웹 서버의 동작 원리 클라이언트는 웹 브라우저를 통해 HTTP Request로 웹사이트를 웹 서버에 요청합니다. 웹 서버는 요청을 승인하고 HTTP Response를 통해 웹 사이트 데이...
MVC >MVC란 Model - View - Controller 의 약자로 소프트웨어 디자인 패턴 중 하나입니다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있습니다. MVC패턴은 소프트웨어를 구성하는 요소들을 Model, View, Controller로 구분하여 각각의 역할을 분리합니다. MVC 패턴은 소프트웨어를 구성하는 요소들을 분...
Servlet, 서블릿 >사용자(클라이언트)의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술입니다. 예를 들어, 사용자가 로그인을 하려고 할 때 사용자는 아이디와 비밀번호를 입력하고 로그인 버튼을 눌렀을 때 그 때 서버는 사용자의 아이디와 비밀번호를 확인하고, 다음 페이지를 띄워주어야하는데 이러한 ...
@RequestParam과 @PathVariable 브라우저에서 서버로 HTTP 요청을 보낼 때, 데이터를 함께 보낼 수 있습니다. 서버에서는 이 데이터를 받아서 사용해야하는데 이 때 데이터를 보내는 방식들이 있습니다. uri를 통해 값을 전달하는 방식은 2가지가 있습니다. @PathVariable > http://localhost:8080/reque...
3Layer Architecture > Spring은 Controller, Service, Repository 3개로 분리하고 각 계층에 따라 역할을 분리하여 개발을 진행하도록 했습니다. 각 Layer에 따라 관심을 갖고 있는 부분이 다르며, 상위 Layer에서 하위 Layer로만 컨트롤을 할 수 있습니다. 즉, Conroller -> Service로 조...
DI, Dependency Injection > 의존성 주입이란 의미로, 객체를 직접 생성하는 것이 아닌 외부에서 주입하는 것을 의미합니다. 일반적으로 의존성에 대한 제어권은 객체 자신이 갖습니다. 하지만, DI는 자신이 아닌, 다른 클래스에서 객체를 생성한 뒤 클래스의 생성자나 setter 등을 이용해 주입시켜줍니다. 위의 예시로 보면 하단의 코드는...
Spring에서는 Spring Container, Ioc Container라는 개념을 사용합니다. Container는 인스턴스의 생명 주기를 관리하며, 생성된 인스터스들에거 추가적인 기능을 제공하도록 하는 것입니다. 즉, Container는 개발자가 작성한 코드의 처리 과정을 위임받은 독립적인 존재이며, 적절한 설정만 되어있다면 작성한 코드를 스스로 참조한...
ORM, Object-Relational Mapping ORM을 사용하기 전에는 DB의 테이블을 만들고 SQL을 작성하고, JDBC를 사용해서 직접 실행하고, 결과를 객체로 만들어야하는 불편함이 있고, 데이터에 새로운 컬럼을 추가하게 된다면, SQL문을 또 수정해야하는 등 여러 불편함이 많습니다. > ORM은 객체와 DB의 데이터를 자동으로 매핑해주며...
Entity > Entity 클래스는 실제 DB 테이블과 매핑 되는 클래스로, 실제 테이블의 존재하는 컬럼들로 필드를 가지는 객체입니다. 즉 DB테이블의 컬럼과 Entity클래스의 필드와 1:1로 매핑됩니다. Entity는 DB의 영속성의 목적으로 사용되는 객체이며, 때문에 Response와 Request의 값을 전달하는 클래스로 사용하는 것은 좋지 않습...
JWT > JWT는 JSON 포맷을 사용하여 사용자의 대한 속성을 저장하는 Web Token 입니다. 보통 Cookie를 사용하여 JWT를 저장합니다. Web Token >웹 애플리케이션에서 사용자 인증 및 권한 부여를 위한 표준화된 방법 중 하나입니다. 특히, 웹 토큰은 클라이언트와 서버 간의 인증 정보를 안전하게 전송하기 위한 메커니즘으로 사용됩니다....
엔티티 간의 연관 관계 지연 로딩과 즉시 로딩을 하기 전에 먼저 엔티티 간의 연관 관계를 알 필요가 있습니다. 관계형 데이터베이스에서는 테이블 간 foreign key로 연관 관계를 맺어 JOIN을 통해 테이블을 조회합니다. Teacher 테이블과 Lecture 테이블이 있다고 했을 때, 하나의 교수는 여러 개의 강의를 할 수 있습니다. 즉, Teache...
사용자가 게시판을 생성할 때, 개수의 제한을 5개로 제한하고 짧은 시간 내에 많은 수의 게시판을 생성하려고 시도할 때 DB에 어떻게 저장되는지 동시성 테스트를 해봤습니다. jMeter로 1000개의 쓰레드를 보내 테스트 해봤습니다. DB에 저장된 모습을 보면 5개가 아닌, 10개가 저장된 모습을 볼 수 있습니다. 짧은 시간 내에 많은 요청을 보내게 되어...
트랜잭션 > 데이터베이스의 상태를 변경시키기 위해 수행하는 작업 단위 또는 한꺼번에 수행되어야 할 일련의 연산들을 의미합니다. 하나의 트랜잭션은 여러 단계로 이루어져 있으며, 모든 단계가 완료되면 커밋(commit)되어 데이터베이스에 변경사항이 저장됩니다. 하지만 중간에 문제가 발생하여 트랜잭션이 완료되지 못할 경우, 롤백(Rollback)을 통해 트랜잭...
AOP, Aspect-Oriented Programming > AOP는 핵심 로직과 부가 기능을 분리하여 애플리케이션 전체에 걸쳐 사용되는 부가 기능을 모듈화하여 재사용할 수 있도록 지원하는 것입니다. 주로 중복되는 부분을 제거하고 횡단 관심사를 개별 모듈로 분리하여, 깔끔하게 유지보수 할 수 있도록 도와줍니다. 횡단 관심사를 개별 모듈로 분리한다는 ...
항해99를 진행하면서 팀원분들과 동시성 문제에 대해 이야기를 나누면서 낙관적락, 비관적락에 대해 테스트도 진행해보고 Redis의 분산 락에 대해 알게 되었습니다. Redis는 Reddison으로 구현하는 분산 락뿐만 아니라, Lettuce의 스핀 락도 존재했는데 스핀 락의 경우 분산 락과 달리, Lock을 얻지 못 하면 계속해서 요청을 보내기 때문에 Re...