전체 글 127

Server Layer (3-Tier)

Server Layer (3-Tier)웹 페이지를 통해 사용자가 어떤 정보를 요청한다고 해보자사용자의 요청은 웹 브라우저를 통해 이뤄진다. 사용자의 요청을 요청 객체에 받아서 요청을 처리하는 비즈니스 계층에 전달된다. 이때, 요청 객체에 담긴 정보는 다양하다. Fom을 통해 입력 정보를 받아올 수도 있고, URL의 ?key=value 값으로 정보를 받아올 수 있다. 또, 사용자 정보를 언제까지 유지할지 설정할 수 있는 세션(session)도 요청 객체에 담을 수 있다. 받아 온 사용자 정보를 가지고 인증 절차를 거치고 비즈니스 계층에서 사용자가 원하는 정보를 반환하기 위해 데이터베이스에 접근하여 필요한 데이터를 가져오고 가공하는 과정을 거친다. 비즈니스 계층에는 크게 요청을 받는 계층(컨트롤러), 받은 ..

Back-end 2024.04.28

인증 방식이란? - API Key, OAuth, JWT

서비스가 다양해지고 규모가 커지면서 기능들을 분리하기 시작했고, 이를 위해 모듈이나 애플리케이션들 간의 공유와 독립성을 보장하기 위한 사용자 인증 기능들이 나타나기 시작했다. 이러한 기능들 중 제일 먼저 등장하고 보편적으로 사용되는 기술은 API Key이다. API Key 동작 방식 사용자는 API Key를 발급받는다. 해당 API를 사용하기 위해 Key와 함께 정보를 요청한다. 애플리케이션은 요청이 들어오면 Key를 통해 사용자의 정보를 확인하여 권한을 확인 후 정보를 반환한다. 문제점 API Key를 사용자에게 직접 발급하고 해당 Key를 통해 통신을 하기 때문에 통신 구간의 암호화가 잘 되어 있더라도 Key가 유출된 경우를 대비하기 힘들다. 때문에 Key를 주기적으로 업데이트해야 하기에 번거롭다. ..

Web 2024.03.20

Cookie와 Session, 왜 사용하지?

Cookie는 클라이언트 측에서 정보를 저장하고 전송하며, Session은 서버 측에서 정보를 유지하고 관리한다. Cookie와 Session은 왜 사용할까? HTTP 프로토콜은 connectionless하고, stateless한 특징을 가지고 있다. HTTP 프로토콜은 클라이언트가 요청한 후 응답을 받으면 그 연결을 끊어 버리는 특성을 가진다. 또, 통신이 끝나면 상태를 유지하지 않는 특성을 가진다. 때문에 서버는 클라이언트가 누군지 확인하는 과정이 필요하다. Cookie와 Session을 사용하여 클라이언트를 확인한다. 저장 위치, 만료 시점, 용량 제한, 보안, 속도, 예시 Cookie란? 저장 위치 Cookie는 클라이언트의 상태 정보를 로컬(웹 브라우저)에 저장한다. 만료 시점(라이프 사이클) ..

Web 2024.03.20

MySQL 연동 (기존 H2 DB 사용)

MySQL으로 DB 교체하기 build.gradle에 MySQL에 대한 의존성 추가 implementation 'mysql:mysql-connector-java:8.0.32' application.yml 설정 파일 수정 datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/{DB이름}?useSSL=false&serverTimeZone=Asia/Seoul&characterEncoding=utf-8 username: {사용자} password: {비밀번호} 비밀번호는 대문자, 소문자, 숫자, 특수문자가 포함된 8자 이상으로 설정해야 한다. 비밀번호 재설정 없이 스프링 서버를 실행했다가 오류를 마주했다. ..

Back-end/Spring 2024.03.08

[Java] 인터페이스(Interface)

인터페이스(Interface) 인터페이스는 사용자 간 또는 컴퓨터 간 '통신'이 가능하도록 연결해주는 디바이스나 프로그램을 의미합니다. 사용자 간, 컴퓨터 간 통신을 위해서는 '규격'이 중요합니다. 여기서 '규격'은 인터페이스라 할 수 있고, 인터페이스는 하나의 '표준화'를 제공하는 것이라 할 수 있습니다. 인터페이스라는 개념은 추상 클래스와 매우 유사합니다. 쉽게 말해 인터페이스는 추상 클래스보다 추상화 정도가 더 높은 개념이라고 생각하면 됩니다. 또, 하나의 차이점은 인터페이스는 일반 메소드나 멤버 필드를 가질 수 없습니다. 어떤 클래스가 인터페이스를 사용한다면(상속받는다면) 인터페이스에 선언되어 있는 메소드 구현해야 한다. 인터페이스를 선언할 때, class 키워드가 아닌 'interface 키워드..

JAVA 2024.02.13

MVC 패턴, MVC 패턴의 한계

목차 MVC 패턴 등장 배경 M, V, C의 역할 기본적인 동작 MVC 패턴의 한계 MVC 패턴 등장 배경 서블릿과 JSP만으로 개발을 진행하면 비즈니스 로직과 뷰 화면 렌더링이 모두 하나의 코드에서 처리된다. 결과적으로 코드의 유지 보수가 어려워진다. 때문에 서블릿의 장점과 JSP의 장점을 살려 MVC 패턴이 등장했다. 서블릿은 컨트롤러 역할을 담당하고, JSP는 뷰 역할을 담당한다. MVC 패턴을 사용함으로써 비즈니스 로직을 수정하는 일과 뷰 화면을 수정하는 일은 각각 다르게 발생하고, 서로에게 영향을 주지 않는다. Model, View, Controller 역할 Model 뷰에 전달할 데이터를 담아둔다. View JSP 역할, 모델에 담겨있는 데이터를 사용해서 화면을 그리는 역할을 한다. (HTML..

JAVA 2024.02.08

JSP와 서블릿(Servlet) 그리고 MVC 패턴

JSP(.jsp)란 무엇인가? JSP는 Java Server Pages의 약자이며, HTML 코드에 Java 코드를 입력하여 동적 웹 페이지를 생성하는 도구이다. JSP 실행 시, 자바 서블릿(Servlet)으로 변환되고 웹 애플리케이션 서버(WAS)에서 동작하면서 필요한 기능을 수행하고 응답 정보를 웹 페이지와 함께 클라이언트로 응답한다. 웹 애플리케이션 서버(WAS, Web Application Server) 웹 애플리케이션 서버는 HTTP 기반으로 동작하고, 웹 서버의 기능을 포함한다. 웹 서버도 HTTP 기반으로 동작하지만, 정적 리소스만을 제공한다. 웹 애플리케이션 서버는 동적 리소스를 제공하기 때문에 클라이언트에 따라 다르게 웹 페이지를 보여줄 수 있다. 대표적인 웹 애플리케이션 서버에는 톰캣..

JAVA 2024.02.06

[코딩테스트 연습] 주차 요금 계산 - Lv.2

주차 요금 계산 - Lv.2 https://school.programmers.co.kr/learn/courses/30/lessons/92341 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr HashMap, TreeMap(정렬을 위해)를 사용하여 각 차량의 입차 시간과 총 주차 시간을 저장했다. 이 문제는 여러 가지 조건들을 통해 구현 능력을 확인하고, 자료구조를 적절히 활용하는 것에 초점은 둔 것 같다. 차량의 입차 시간을 저장하는 inTime Map과 차량의 총 주차 시간을 저장하는 parking Map을 선언했다. 차량 번호가 아닌 입/출차를 의미하는..

프로그래머스 2024.02.01

스레드 풀(Thread Pool)과 Executor

목차 스레드 풀이란? 스레드 풀을 왜 사용해야 하는가? 자바는 스레드 풀을 어떻게 구현하는가? Executor 인터페이스를 왜 사용하는가? Executor 인터페이스에 대하여 Executor 동작 주기 스레드 풀은 동일하고 독립적인 다수의 작업을 실행할 때 가장 효과적이다. 스레드 풀이란? 스레드 풀은 스레드를 생성하여 관리하는 곳이다. 생성된 스레드에 작업을 할당해 동시에 실행되는 작업을 관리한다. 스레드는 할당된 작업이 끝나면 스레드 풀로 돌아와 대기 상태가 되며, 다음 작업 할당을 위해 준비한다. 스레드 풀의 스레드에 할당되는 작업의 종류 혹은 처리 시간이 비슷할수록 해당 스레드 풀의 작업 처리 속도가 빨라진다. 또한, 크기가 제한된 스레드 풀에 다른 작업과 의존성을 가지는 작업이 할당될 경우 데드..

JAVA 2024.01.31

스레드(Thread)

목차 스레드란? 스레드 고안 스레드 이점 스레드 사용의 위험성 스레드는 멀티프로세서 시스템의 능력을 최대한 끌어낼 수 있는 가장 쉬운 방법이다. 프로세서 개수가 늘어날수록 여러 작업을 동시에 실행하는 일이 더욱 중요하다. 스레드란(Thread)? 스레드란 프로세스 내에서 실제로 작업을 수행하는 주체를 의미하며, 스레드 사용으로 인해 하나의 프로그램 안에 여러 개의 프로그램 제어 흐름이 공존할 수 있다. 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행한다. 프로세스(Process)란? → 프로세스란 운영체제에 의해 메모리에 적재되어 실행 중인 프로그램이다. 프로세스는 독립적인 메모리 영역을 사용한다. 스레드 고안 스레드는 프로세스의 문제점을 해결하고자 고안됐다. 프로세스의 생성 및 소멸에 따..

JAVA 2024.01.27