전체 글 57

[Project] - 카페 체크인

저의 첫 프로젝트이자 남들이 볼 땐 쉬워보여도 저에겐 꽤나 고난이었던 프로젝트, 카페 체크인을 소개합니다....! 우선 "카페 체크인" 이라는 프로젝트는 서울에 존재하는 수 많은 카페 중 제가 원하는 카페를 정하려면 한 세월이 걸리는 불편함을 느꼈고 직접 한번 사이트를 만들자 라는 생각에 만들었고 사용자들이 원하는 분위기의 카페를 한눈에 쉽고 빠르게 확인할 수 있는 서비스입니다 ㅎㅎ 카페 체크인 개요 주요 기능 • 자유 게시판 글 작성 및 좋아요 기능 • 카페 리뷰 및 좋아요 기능 • 댓글 기능 • 관리자를 통한 카페 등록 및 게시글 관리 개발 기간 • 2023.07 ~ 2023.10 (3개월) 참여 인원 • 백엔드(1명) Skills JAVA, Spring Boot, JPA, SMTP, Mysql 담당..

Project 2024.04.05

[JAVA] 동시성 & Thread

프로젝트를 진행 중 좋아요를 누르는 API가 있는데 문득 동시에 여러사람이 동시에 하나의 게시글에 좋아료를 눌렀을 때 어떻게 될까?라는 의문을 가지게 되었다.. 현재 코드에서는 만약 2명의 유저가 하나의 게시글에 좋아요를 동시에 눌렀을 때 좋아요 갯수가 하나만 올라간다...! 😪 물론 좋아요갯수가 중요도가 높은 API는 아니긴 하지만 동시성에 관심을 갖고 한번 해결해보고 싶었다. 우선 동시성을 하기 전에 Thread개념에 대해 알아야한다. https://wnstjr120422.tistory.com/entry/JAVA-Thread-Runnable-Multi-Thread%EB%9E%80 [JAVA] Thread & Runnable & Multi Thread란? Thread(스레드)란? 프로세스 내에서 실행되..

JAVA 2024.03.03

[HTTP] Stateful, Stateless, Connectionless

Stateful(상태유지) 상태유지 상태유지 - 만약 중간에 점원이 바뀌면? Stateless(무상태 프로토콜) 서버가 클라이언트의 상태를 보존하지 않음 장점 ⇒ 서버 확장성이 높음 단점 ⇒ 클라이언트가 추가적인 데이터를 전송 무상태 유지 무상태 유지 - 만약 점원이 중간에 바뀌면? 더보기 📌 상태유지 ⇒ 중간에 서버가 변경이 되어선 안된다.(항상 같은 서버 유지) 만약 중간에 서버가 고장나면 클라이언트는 처음부터 다시 데이터를 전송해야함 무상태유지 ⇒ 아무 서버나 호출해도 가능 중간에 서버가 고장나면 다른 서버를 이용하면 된다. 로그인 방식에서는 무조건 Stateful방식을 사용해야하나? 기존에 사용하던 세션방식으로 로그인 하는 방식은 Stateful방식을 이용해야한다. 왜냐하면 서버가 바뀌면 사용자는..

HTTP 2024.01.14

[HTTP] HTTP란?

HTTP란? 하이퍼 텍스트를 주고 받기 위한 규칙 HTTP 특징 클라이언트 서버 구조 클라이언트의 요청이 있을 때만 서버에서 요청이 따른 응답을 반환 클라이언트에서 서버에 요청을 하는 단방향 통신, 서버가 먼저 요청을 할 수 없음 단방향 통신의 단점 → Chat gpt처럼 서버가 먼저 클라이언트에게 답을 할 순 없다 무상태(stateless) 프로토콜, 비연결성 서버가 클라이언트의 연결, 상태정보를 보존하지 않음 ⇒ Stateless 클라이언트가 서버에 요청을 하고 응답을 받으면 바로 TCP/IP연결을 끊어 연결을 유지하지 않음 ⇒ 비연결성 HTTP메시지 단순함, 확장 가능

HTTP 2024.01.02

[HTTP] URI와 웹 브라우저 요청 흐름

URL(Uniform Resource Locater)이란? 웹 상에서 특정한 자원에 대한 주소 URL 구조 Scheme 브라우저가 자원을 요청하기 위해 사용해야 하는 Protocol을 지정 👉🏼 http(s):// → Scheme userinfo&Domain name userinfo는 사용자의 정보를 포함하는데 거의 사용X Domain Name은 요청이 전달되는 web server(DNS도 가능)를 가리키며 IP address로도 표현 가능 👉🏼 http(s)://www.google.com → Domain Name Port 접속포트 일반적인 웹사이트에서는 제외하지만, 특정 서버에 접근할 때는 사용 👉🏼 http(s)://www.google.com:8080 → Port Path 경로를 표현 예전에는 물리적..

HTTP 2023.12.30

[HTTP] 인터넷 네트워크

네트워크란? 노드들이 데이터를 공유할 수 있게 하는 디지털 전기 통신망의 하나 → 분산되어 있는 컴퓨터를 통신망으로 연결하는 것 노드란? 네트워크에 속한 컴퓨터 또는 통신 장비를 뜻하는 말 IP통신 클라이언트가 Socker(파일)을 전송 → 인터넷에 있는 수많은 노드를 통해 → 서버로 전송 IP(인터넷 프로토콜)역할 지정한 IP주소에 데이터 전달 패킷이라는 통신 단위로 데이터 전달 위의 사진을 보면 클라이언트에게도 IP주소가 있고, 데이터를 받는 서버에도 IP주소가 있다. 즉, 어떠한 데이터를 보낼 때 최소한의 규칙이 필요한데 이를 패킷이라는 규칙으로 전송함 IP패킷에는 클라이언트의 IP주소, 서버의 IP주소등을 담고 있음 → 최소한의 규칙 클라이언트가 패킷에 데이터, 각 IP주소등을 담아 전달을 하면 ..

HTTP 2023.12.22

Docker란?

도커(Docker)란? 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼 여기서 도커의 핵심개념은 바로 이미지와 컨테이너라는 개념이다. 하나의 컴퓨터에 설치된 리눅스 운영체제에서 완전히 분리된 별도의 리눅스 시스템을 운영할 수 있는 기술 CPU, 메모리, 네트워크를 분리하여서 마치 별도의 시스템처럼 사용할 수 있는 기술 그럼 우선 컨테이너에 대해 먼저 알아보자! 컨테이너란? 어떠한 어플리케이션을 작동시키기 위해 필요한 라이브러리나 의존성, 설정과 같은 것들을 하나로 모아서 별도의 서버인 것처럼 사용할 수 있게 만든 것을 의미 그렇다면 컨테이너와 VM의 차이는 무엇일까? 물론 둘 다 애플리케이션을 구동하는 데 필요한 것을 지니고 실행에 도움을 준다는 것을 알고 있다. VM(가상머신..

Cloud 2023.11.06

[HTTP] REST API란?

REST란? 분산 하이퍼미디어 시스템(ex: web)을 위한 아키텍처 스타일(제약조건의 집합) HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해 해당 리소스(URI)에 대한 CRUD Operation을 적용하는 것을 의미 REST의 구성요소 자원(Resource) : HTTP URI 자원에 대한 행위(Verb) : HTTP Method 자원에 대한 행위의 내용 (Representations) : HTTP Message Pay Load 그럼 우리가 사용하는 REST API라고 부르는 것들은 정말 REST를 잘 지키면서 사용하고 있는걸까? 물론 있기야 하겠지만 대부분은 지키지 않는다고 한다. 위의 정의를 보면 제약조건의 집합을 지킨 것이 REST라고 해놓았는데 대부분의 ..

HTTP 2023.10.21

JPA_DataSource

Connection Pool 싱글톤 패턴이라고도 할 수 있는데 Db Connection을 만들어놓고 해당 Connection을 사용할 수 있도록 관리하는 것 즉, 여러 개의 Db Connection을 생성하지 않아도 되기 때문에 성능 측면에서 효율적 DataSource DB와의 연결을 미리 생성하고, 그것을 관리하는 역할을 하는 객체 DB Connection을 관리하는 인터페이스 Connection을 획득하는 방법을 추상화한 인터페이스 Connection Pool을 사용하기 위한 인터페이스 getConnection()를 지원해서 DB연결하려는 객체에게 Connection을 주고 다 쓰면 반납함 public BoardResponseDto(JdbcTemplate template) { ///... } 위의 코..

JPA 2023.10.17

JAVA_단위 테스트&통합 테스트

모든 개발자들은 프로젝트를 할 때 테스트는 반드시 필요한 필수조건이다. 테스트종류에는 위의 사진과 같이 (아래서부터)단위 테스트, 서비스 테스트, 사용자 인터페이스 테스트 총 3가지가 있다. Unit Tests(단위 테스트) 작은 컴포넌트, 하나의 기능을 하는 함수처럼 잘개 쪼개어 테스트 하는 방식 @Test public void 게시글_저장_불러오기(){ //given String title="테스트 게시글"; String content="테스트 본문"; postsRepository.save(Posts.builder() .title(title) .content(content) .author("junseck") .build()); //when List postsList=postsRepository.fin..

JAVA 2023.10.16