Cookie, Session, JWT 이러한 방법들을 사용해서 사용자 정보를 갖는 이유는 HTTP의 Stateless한 특징 때문이다. Cookie HTTP의 무상태를 보완하기 위해 사용자 정보를 쿠키에 담아서 요청 시 함께 보내는 방법 매커니즘 클라이언트(브라우저)가 로그인을 하면 서버가 응답 시 쿠키에 사용자 정보를 담아서 반환해준다. 클라이언트는 사용자 정보를 저장하고 서버에 요청할 때마다 HTTP HEADER에 해당 쿠키를 실어서 보낸다. 주의사항 HTTPS가 아니라면 쿠키가 암호화되지 않으므로 노출될 가능성이 있다. 따라서 회원관련 정보는 담지 않는것이 좋다. HTTP Only 설정 시 브라우저를 통한 요청이 아닌 Javascript 등을 통해 Cookie를 담아 요청하면 HTTP ONLY가 아..
SYN Flooding Attack란? SYN ACK는 4 Layer 계층에서 TCP의 3-way hadnshake를 맺을 때 교환하는 비트 정보이다. 기본적인 TCP 3-way handshake 클라이언트가 서버에 SYN을 보낸다. 서버가 SYN 응답으로 ACK를 보내고 연결을 위해 SYN을 보낸다. 클라이언트가 SYN 응답으로 ACK를 보낸다. SYN Flooding Attack 방식의 경우 공격자가 서버에 SYN을 보낸다. 서버가 SYN 응답으로 ACK를 보내고 연결을 위해 SYN을 보낸다. (ACK를 기다리며 대기한다.) 공격자는 ACK를 보내지 않고 대량의 SYN을 보낸다. (이때 패킷은 내용은 없고 헤더에 SYN 비트만 체크되어있다) 서버는 SYN에 대응하기 위해 사용하지 않는 포트를 계속 할..
서블릿 서블릿은 클라이언트의 요청에 대해 멀티 쓰레드로 처리가 가능하도록 한 기술이다. 쓰레드가 서블릿을 할당받아서 수행하게 되고, 개발자는 쓰레드에 관해 신경쓰지 않아도 되게됐다. 문제는 HTML 생성이 어려웠다. 요청에 대해 동적으로 HTML 웹 뷰를 생성하는게 너무 힘들었다는 것. JSP HTML 화면을 쉽게 작성할 수 있고 + Java code도 작성할 수 있게 됐다. 결국 서블릿으로 변환되어 처리되지만 해당 부분은 개발자가 신경쓰지 않아도 되는 부분이다. 문제는 HTML 생성은 편리한데 비지니스 로직까지 담당하게 된다. 서블릿, JSP 조합 MVC 패턴 사용 모델, 뷰, 컨트롤러로 역할을 나누어 개발하게 된다. 화면을 담당하는 뷰에 너무 많은 부담을 주지 않도록 하기위해 나왔다. 이 패턴이 비슷..
자바 웹 서버에서 요청들이 오면 해당 요청들을 처리하는 것이 서블렛이다. 이 서블렛들은 싱글톤으로 관리된다 했는데 서블렛을 부르는 존재는 누구일까? 쓰레드 애플리케이션 코드를 하나하나 순차적으로 실행하는 것이 쓰레드이다. 프로그램의 수행단위가 쓰레드. 자바 메인 메서드를 처음 실행하면 main이라는 이름을 가진 쓰레드가 실행된다. 쓰레드가 없다면 자바 애플리케이션 실행 조차 불가능하다. 쓰레드는 한번에 하나의 코드라인만 수행한다. 이를 위해 각 쓰레드는 PC라는 프로그램 카운터를 갖는다. 동시 처리가 필요하면 쓰레드를 추가 생성한다. WAS에 클라이언트로부터 요청이 들어오고 -> 해당 요청에 쓰레드가 할당된다 -> 쓰레드에 요청에 맞는 서블렛을 불러와서 코드를 실행을 하게 된다. Q. 만약 쓰레드가 할당..
HTTP Hypter Text Transfer Protocol Hyper Text : 대표적으로 html이 있다. 클라이언트와 서버 사이에서 이뤄지는 요청/응답 프로토콜이다. HTTPS Hyper Text Transfer Over Sercure Socker Layer SSL/TLS 상에서 동작하는 HTTP이다. TLS (SSL) Transport Layer Security 초기 발명되었을 때 이름이 SSL이었고, 이후 표준화 기구 IETF로 이관되면서 TLS라는 이름으로 변경되었다. 즉, 동일한 프로토콜을 지칭한다. TLS는 SSL 3.0을 계승한다. Application Layer와 Transport Layer 중간에서 역활을 수행한다. 응용 프로그램이 전달한 데이터를 암호화해서 TCP에 전달하거나, ..
트랜잭션이란? 데이터베이스 관리 시스템 (DBMS)에서 DB의 상태를 변화시키는 작업의 논리적 최소 단위를 의미한다. 트랜잭션 특징 : ACID Atomicity 원자단위로서 더이상 쪼갤 수 없는 논리적 최소 단위임을 말한다. 예를 들어 계좌이체를 하는 경우 송금/입금이 존재하는데 두 작업은 쪼갤 수 없다는 것이다. 송금이 성공하고 입금이 실패하는 트랜잭션은 존재하지 않도록 하는 것이 목적. Consistency 트랜잭션이 성공했다면 데이터베이스는 항상 일관성 있는 상태로 유지 되어야 하는 것을 말한다. 만약 도메인 무결성 제약조건이 잔고는 0미만이 될 수 없다는 것이라면 이를 위반하는 트랜잭션은 존재할 수 없는 것이다. Isolation 트랜잭션을 수행중에 다른 트랜잭션이 끼어들 수 없음을 말한다. 송..
Exception과 Error의 구분 예외와 에러에 대한 차이부터 알아보자. 예외(Exception)은 사용자의 잘못된 값이나 접근으로 인해 발생하는 것으로 정상적인 코드의 흐름에서 벗어나는 행동을 했을 때 발생한다. 따라서 개발자가 예외상황을 미리 예측해서 에러 핸들링을 할 수 있다. 에러(Error)는 시스템 상의 문제가 발생해서 발생되는 것으로 개발자가 따로 막을 수 없는 경우이다. 이 경우는 애플리케이션의 코드레벨에서 방어가 불가능하다. 일반적으로 OutOfMemorry, StackOverflow 등이 있다. 예외 구분 예외는 크게 Checked Exception과 Unchecked Exception으로 나눌 수 있다. 이를 구분 짓는 특징은 RuntimeException의 상속 여부이다. 상속한..
스프링 부트 웹 애플리케이션을 실행시키면 내장 서블릿 컨테이너인 웹서버 톰캣을 사용해서 애플리케이션이 구동된다. 이 톰캣은 "아파치 톰캣"이라는 이름을 갖고 있다. 아파치란 무엇이고, 톰캣이란 무엇인지, 웹서버의 역활은 무엇인지 알아본다. Aapach 흔히 부르는 아파치는 Aapache HTTP Web Server를 의미한다. 이는 오픈 소스 소프트웨어 그룹인 아파치 소프트웨어 재단에서 만든 HTTP 웹 서버 프로그램이다. http 웹 서버는 http 요청을 처리할 수 있는 웹서버이고, 아파치 http 웹 서버는 아파치에서 만든 http 요청을 처리하는 웹 서버인 것이다. 클라이언트가 GET, PUT, UPDATE, DELETE 등의 요청을 보내면 프로그램이 그에 적절히 응답하는 기능을 한다. 현대 네트..
AOP : Aspect Orioented Programming Aspect를 중심으로 프로그래밍하는 기법이다. OOP를 보완하는 기술로 흩어진 Aspect를 모듈화 할 수 있도록 한다. 즉, 여러곳에서 사용되는 공통기능을 모듈화 하고 쓰이는 곳에 필요할 때 연결함으로서 유지보수 및 재사용성을 높일 수 있다. 예를들어 상품을 구매하거나, 글을 쓰거나, 댓글을 쓰는 등 다양한 기능에서 회원 검증을 하는 로직이 존재할 수 있다. 이러한 [회원 검증]로직을 Aspect로서 하나의 모듈화하여 사용할 수 있다. 위를 아래와 같이 기능별 Aspect로 볼 수 있다. AOP 주요 용어 Aspect 여러곳에서 쓰이는 공통기능(코드)를 모듈화 한것 Target Aspect가 적용되는 클래스 또는 메소드 Aspect가 갖고..
문제 : 스프링 부트 ec2에서 https 443포트로 배포시 에러 발생 프로젝트 진행 중 기존 ec2를 통해 애플리케이션을 배포할 때는 전혀 문제없이 배포가 되고 있었다. 이후 도메인을 얻고 ssl 인증서를 추가해서 https로 변경 후 443포트를 이용하도록 변경하고나서 다시 ec2로 배포를 하자 수많은 에러를 내뿜으면서 배포에 실패하였다. 에러 org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop'; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded ..
JPA란? JPA는 Java Persistence API 로 자바 영속성 API로 JDBC를 이용해서 데이터베이스를 관리하는 인터페이스이다. 대표적인 구현체로Hibernate가 있다. 자바 ORM기술의 표준 API이다. (Obejct Relational Mapping) 영속석 컨텍스트 JPA가 가장 중요시 여기는 것이 바로 영속성 관리이다. DB에 객체를 저장하기 위한 JPA이므로 영속성 관리는 매우 핵심적인 내용이다. 엔티티 매니저 팩토리와 엔티티 매니저 JPA는 쓰레드가 하나 생성될 때마다 (서비스 요청이 들어올 때마다) EntityManagerFactory에서 EntityManager를 생성한다. EntityManager는 내부적으로 DB 커넥션 풀을 사용해서 DB와 커넥션을 맺는다. 자세한 내용은..
HTTP 기본적으로 HTTP Protocol은 비연결성의 특징을 갖고 있으므로 실시간 통신을 하기에 적합하지 않은데, 이를 구현하는 방식 3가지를 알아보자 HTTP의 실시간 통신 방식 Polling Long Polling Streaming poilling 폴링 브라우저가 일정한 주기마다 서버에 HTTP 요청을 보내는 방식 실시간 데이터의 업데이트 주기는 예측 불가능하므로, 불필요한 요청에 따른 서버 및 네트워크의 부하가 늘어난다 실시간 야구 문자 중계같이 5~10초 주기로 계속 업데이트를 시키는 방식 단점 : time interval을 어떻게 잡냐에 따라 서버의 부하가 올라가거나 실시간성이 떨어지는 trade off 관계를 갖는다 사용 : 실시간성이 조금 떨어져도 되고 시간을 늘려 여러대의 클라이언트와 ..
- Total
- Today
- Yesterday