분류 전체보기
-
스프링 : PersistenceContext(영속성 컨텍스트)백엔드 : 서버공부/Spring 2024. 2. 12. 23:17
영속성 컨텍스트란 JPA가 엔티티를 영구 저장하는 환경을 말합니다. 쉽게말해서 JPA가 엔티티를 추적하고 관리하는 영역입니다. 이 환경에서 엔티티는 영속 상태로 관리됩니다. 예를들어 영속성 컨텍스트에서 Member 엔티티를 저장하면, 해당 엔티티는 영속성 컨텍스트 내에 존재하게 됩니다. 다시말해 JPA가 그 엔티티를 '기억'하고 있게 됩니다. 트랜잭션이 커밋되면 JPA가 영속성 컨텍스트에 있는 엔티티를 데이터베이스에 반영합니다. 따라서 Member 엔티티를 영속성 컨텍스트에 저장하면, 해당 엔티티는 트랜잭션이 커밋되는 시점에 데이터베이스에 삽입됩니다. @Repository @RequiredArgsConstructor public class MemberRepository { @PersistenceConte..
-
스프링 : CascadeType.ALL 사용해보기백엔드 : 서버공부/Spring 2024. 2. 11. 23:38
스프링을 공부하고 프로젝트를 진행하면서 JPA를 사용하게됬는데 이때 연관된 엔티티들을 데이터베이스에 저장, 수정 또는 삭제할 때, 이러한 작업들을 각각 수행해야 하는 번거로움이 있었습니다.(번거로움 + 수작업 누락으로인한 오류발생) 예를 들어, 하나의 주문(Order)이 여러 주문 항목(OrderItem)과 하나의 배송 정보(Delivery)를 포함하는 상황을 생각해보면, 주문을 데이터베이스에 저장할 때, 주문 뿐만 아니라 모든 주문 항목과 배송 정보도 함께 저장해야 합니다. 이 과정이 수동으로 진행된다면, 코드는 불필요하게 복잡해지고, 데이터 일관성을 유지하는 것이 어려워집니다. 이러한 문제의 해결책으로 `CascadeType.ALL` 이 있다는 것을 알게되었습니다. JPA에서 CascadeType.A..
-
서버공부 시작 { HTTP } : 간단한 웹서버 띄우기백엔드 : 서버공부 2023. 10. 2. 14:06
Java를 이용해서 간단한 웹서버를 띄워볼 것입니다. 완전한 서버를 구축하기 위해서는 다른 역할을 수행하는 클래스들이 많이 필요하지만, 여기서는 많은 클래스들 중 RequestHandler를 통해 HTTP 메세지를 읽고 쓰는 등의 처리하는 과정을 살펴보겠습니다. 먼저 전체 코드는 아래와 같습니다. package webserver; import db.MemoryUserRepository; import db.Repository; import model.User; import http.util.IOUtils; import http.util.HttpRequestUtils; import java.io.*; import java.net.Socket; import java.nio.file.Files; import j..
-
서버공부 시작 {프로토콜 공부} : TCP/UDP부터 HTTP/HTTPS백엔드 : 서버공부/NetWork 2023. 9. 27. 00:41
HTTP 와 HTTPS 를 학습하기위한 빌드업. TCP / UDP TCP UDP (UDT 아님) TCP는 통신에 있어서 아주 중요한 프로토콜입니다. IP만으로 데이터를 주고 받기에는 문제가 많은데, 먼저 전송할 데이터가 큰 경우 인터넷 대역폭을 너무 많이 차지하는 문제가 있습니다. 그래서 TCP는 데이터를 작은 단위인 패킷으로 쪼개서 보냅니다. 패킷으로 나누어진 데이터들은 전송될때 유실되거나 순서가 섞일 수 있는데, TCP는 순서보장 및 재전송 등의 기능을 통해 오류를 검출하고 재전송을 송신자 측에 재전송을 요청하는 등 통신의 신뢰성을 보장합니다. UDP도 통신에서 중요한 프로토콜 입니다. 비연결형 프로토콜이라고 불리는 UDP는 패킷이 제각각 다른 경로로 이동합니다. 순서보장이나, 병목현상을 방지하기위한..
-
서버공부 시작{ TCP/IP } : 인터넷의 열쇠백엔드 : 서버공부/NetWork 2023. 9. 2. 17:29
인터넷의 열쇠 TCP/IP 물리적으로 떨어져 있는 컴퓨터와 장치들이 서로 통신하고 데이터를 교환하는 것은 지금 우리 생활에서 무척이나 중요한 역할을하고 있고 당연한 일입니다. 하지만 몇 십 년 전까지만 해도 이러한 컴퓨터 간 통신은 큰 어려움을 동반한 일이었습니다. 그 동안 데이터를 공유하거나 통신하기 위해서는 복잡한 방법들과 많은 과정이 필요했습니다. 그런데, 이 모든 것이 바뀌었던 시점이 있었습니다. 1960년대 후반과 1970년대 초반, 전세계적으로 컴퓨터 네트워크가 확장되면서 'TCP/IP'라는 개념이 등장하게 되었습니다. 이 개념은 현재까지도 네트워크 통신의 기초를 이루는 중요한 요소 중 하나로 자리 잡고 있습니다. TCP/IP는 "Transmission Control Protocol/Inter..
-
Netflix Full Cycle Developer : 모든 단계를 아우르는 개발자잡다한 글 2023. 8. 28. 11:08
지금까지의 소프트웨어 개발은 백엔드, 프론트엔드, 테스트, QA, 데이터 베이스 등의 다양한 분야로 세분화되어 있었습니다. 각 분야의 개발자들은 주로 자신의 전문 분야에서 작업을 수행하며, 종종 협업보다는 자신의 영역에서 최선을 다하는 데 중점을 두었습니다.(스페셜리스트) 그러나 이러한 개발 방식은 빠르게 변화하는 현대의 개발에는 적합하지 않을 수 있습니다. 넷플릭스는 이러한 개발 환경에서의 제한성을 극복하기 위해 Full Cycle Developer라는 개념을 도입하게 되었습니다. Full Cycle Developer ....??? Full Cycle Developer 개념은 개발자가 제품의 아이디어에서부터 출시, 운영, 유지보수, 확장까지의 모든 단계를 이해하고 개발하는 것을 의미합니다. 개념의 도입..
-
Node.js로 라우팅 실습하기백엔드 : 서버공부/Node.js 2023. 8. 18. 20:00
이번 글에서는 Node.js와 express 라는 것을 통해 간단한 라우팅을 해보겠습니다. 코딩이라고해서 모든 필요한 코드들을 처음부터 끝까지 직접짜는것은 굉장히 비효율적이고 실제로 그렇게 이루어지지 않습니다. Node.js를 사용하여 코딩할때도 마찬가지입니다. Node.js를 지원하는 express라는 라이브러리를 이용해서 서버코드를 작성할 것 입니다. Express라이브러리 설치는 터미널을 통해 이루어지게됩니다. npm을 통해 터미널에 명령어를 입력해 다운받아보겠습니다. 터미널에 아래와 같은 명령어를 입력합니다. npm init entry point 입력만 잘해주고 나머지는 공란으로 두고 엔터치기 이 명령어를 입력하면 사용한 라이브러를 기록해주는 package.json과 같은 필요한 파일들이 자동으로..
-
Node.js 란?백엔드 : 서버공부/Node.js 2023. 8. 18. 17:40
이번 카테고리에서는 Node.js를 이용해서 html파일을 넘겨주도록하는 기본적인 라우팅을 구현해보겠습니다. 우선 Node.js가 무엇인지에대해 알아보도록 하겠습니다. Node.js란 무엇인가? Node.js를 인터넷에 검색해보면 javascript 런타임이라고 소개하는 것을 쉽게 볼 수 있습니다. javascript는 Html을 조작하기 위한 언어로 Html에 종속된 언어입니다. javascript는 웹페이지를 좀더 다이나믹하게 바꿔주는 역할을 합니다. 이 javascript해석은 chrome과 같은 브라우저가 담당합니다. 그 중 chrome은 javascript해석 도구로서 V8이라는것을 만들었습니다. 이 V8에 부가적인 기능을 추가해서 그 자체로 출시를 하게 되는데 이것이 Node.js입니다. No..