목록CS 지식/Web (8)
Taking baby-developer steps

자바 스프링 부트를 배우기 시작하며, 점프투 스프링부트에서 권장하는 IDE인 STS4를 처음 써보고 있다. 이클립스 기반으로 만들어진 IDE 라고 한다. 그런데, 글씨가 너무 작은데 "control" + "+" (+ "shift") 단축어가 전혀 먹히지 않아서 그냥 쓰고 있었는데, 거슬려서 설정 먼저 하자 하고 구글링을 해봤다. 대부분 window 탭 내의 Preferences 나 Properties 에 들어가라고 나오는데... 내 윈도우 탭에는 그런 메뉴가 없다.. 결론 : STS4를 클릭해 Settings으로 들어가면 된다 다크모드 전환 STS4 > Settings로 들어간 후 뜬 Preferences 창에서 General > Appearance 로 들어가 Enable Theming 에서 Dark로 ..
인터페이스와 구현체에 대한 생각 JPA는 자바 진영에서 ORM(Object-Relational Mapping)의 기술 표준으로 사용하는 인터페이스의 모음이다. 즉, JPA는 인터페이스이므로 이를 구현하는 실제 클래스가 필요하다. JPA를 구현한 대표적 실제 클래스에는 하이버네이트(Hibernate)가 있다. 처음 "JPA는 인터페이스 이므로 이를 구현하는 실제 클래스가 필요하다"는 말이 잘 이해가 되지 않았다. ORM이라고는 Typescript에서 typeORM을 써본 경험밖에 없었다. 그래서 chatGPT에게 JPA를 사용하는 CRUD 예시코드를 부탁했다. 하이버네이트와 이클립스링크를 활용한 JPA CRUD를 보고 나니, 주요 로직 및 코드 구조가 차이가 없었다. 차이라곤 의존성 파일에 Hibernat..
영속성 컨텍스트 - 엔티티를 관리하는 가상의 공간. (Spring Data JPA가 관리하는 엔티티 매니저가 엔티티를 영속성 컨텍스트에 저장한다) - JPA의 중요한 특징 중 하나. - 다음 4가지의 특징을 가지고 있다. 1차 캐시 영속성 컨텍스트는 내부에 1차 캐시를 가지고 있다. 캐시의 키는 엔티티의 @Id 애너테이션이 달린 기본키 역할을 하는 식별자이며 값은 엔터티이다. 엔터티를 조회하면 1차 캐시에서 데이터를 조회하고 값이 있으면 반환한다. 값이 없는 경우엔 데이터베이스에서 조회해 1차 캐시에 저장한 후 반환한다. 1차 캐시를 이용해, 캐시된 데이터는 DB를 거치지 않아 빠르게 데이터를 조회할 수 있다. 쓰기 지연 쓰기 지연(transational write-befind)은 트랜잭션을 커밋하기 전..
스프링에서 중요한 콘셉트로는 제어의 역전(IoC)과 의존성 주입(DI)이 있다. IoC(Inversion of Control) 스프링 컨테이너가 객체를 관리할 때, 외부에서 관리하는 객체를 가져와 사용하는 것을 말한다. DI(Dependency Injection) IoC를 구현하기 위해 사용하는 방법. 스프링 컨테이너에서 객체를 주입해서 사용한다. 일반적인 자바 코드는 클래스 내에서 어떤 객체를 쓰고 싶은 경우 직접 생성하지만, 스프링의 경우 스프링 컨테이너에서 객체를 주입받아 사용한다. 이것을 IoC/DI 개념이라고 하며 스프링의 핵심 개념이라고 할 만큼 중요하다. 스프링 컨테이너는 뭘까? 빈을 생성하고 관리하는 주체. 빈이 생성되고 소멸하기까지의 생명주기를 관리한다. 빈은 뭔데? 스프링 컨테이너가 생..
엔터프라이즈 애플리케이션이란? 대규모의 복잡한 데이터를 관리하는 애플리케이션을 말한다. 예시로 은행 시스템을 생각해보자. 동시에 몇 백만, 몇 천만의 사람이 한꺼번에 잔고를 조회하고, 입금, 출금 요청을 한다. 엔터프라이즈 애플리케이션은 많은 사용자의 요청을 동시에 처리해야한다. 따라서 서버 성능과 안정성, 보안이 매우 중요하다. 이것을 신경 쓰며 사이트 기능, 비즈니스 로직까지 개발하기는 매우 어렵다. 스프링의 등장 서버 성능, 안정성, 보안을 매우 높은 수준으로 제공하는 도구. 이 덕에 개발자들은 기능 개발에 집중할 수 있게 됐다. 장점이 많은 개발 도구이지만 설정이 매우 복잡하다. 그래서 스프링 개발팀에서도 이런 단점을 인식하고 단점을 보완하고자 스프링 부트를 출시했다. 스프링 부트 스프링 프레임워..
롤링배포 특정 개수의 서버들을 돌아가며 배포하는 방법 블루 그린 배포 똑같은 서버 인스턴스를 띄우고, 로드밸런서 설정을 바꾸어 배포하는 방법. 카나리 배포 전체 서버의 특정 비율만큼 배포해보고 문제 없는 경우 점점 배포를 늘려가는 방법. 백엔드 개발자는 코드의 개발부터 테스트, 배포, 모니터링까지를 여러번 반복한다. 빌드부터 배포까지의 과정을 자동화 하는 것을 보통 CI/CD라고 한다. CI(Continuous Integration) 지속적 통합. 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 저장소에 통합되는 것. CD(Continuous Delivery & Deployment) 지속적 배포. 실제 프로덕션 환경까지 변경된 코드가 반영 되는 것.
라이브러리 재사용 가능한 코드 모음. 개발에 필요한 기능인 클래스, 함수 등을 모은 것. 개발자가 필요한 기능을 직접 호출하여 사용하며, 개발 프로젝트에 대한 제어권을 가지고 있다. 수학 함수, 데이터베이스 연결, 그래픽 처리 등을 위한 라이브러리등이 있다. 프레임워크 어떤 작업을 수행하도록 구조를 제공하는 뼈대나 틀. 서비스 개발에 필요한 구조, 패턴 및 도구를 제공. 개발자가 프레임워크에 따라 정해진 규칙과 구조를 따라야 한다. URL 라우팅, 데이터베이스 연결, 보안, 템플릿 엔진 등을 제공한다. 차이점 : 가장 큰 차이는 제어와 역할 분담 라이브러리는 개발자가 필요한 기능을 직접 호출하고 제어하지만, 프레임워크는 개발자에게 구조와 규칙을 제시하며, 개발자는 이 구조에 따라 코드를 작성해야한다. 사..
HTTP(Hypertext Transfer Protocol)는 웹에서 정보를 주고받는 데 사용되는 프로토콜로, 다양한 메서드를 제공해 클라이언트와 서버간의 상호작용을 정의한다. HTTP 프로토콜에서 지원하는 주요 메서드는 다음과 같다. GET / HEAD POST / PUT / PATCH DELETE OPTIONS CONNECT TRACE GET / HEAD - 리소스 요청, 조회 GET 메서드는 서버로부터 리소스를 요청하는 데 사용된다. 요청된 리소스는 URL에 포함된 쿼리 매개변수에 따라 반환된다. 이 메서드는 요청한 리소스를 읽기만 하고 변경하지 않는다. HEAD 메서드는 GET과 유사하지만, 서버는 응답으로 실제 데이터(메시지의 body부)를 반환하지 않고 헤더 정보만 반환한다. 이는 리소스의 메..