블로그
전체 16#카테고리
- 백엔드
#태그
- 워밍업클럽스터디
- 백엔드
- 자바
- 스프링부트
- 발자국
2024. 03. 09.
0
[인프런 워밍업 클럽 스터디] 14일차 - 마무리
Client-Side Rendering첫 로딩은 느리지만, 그 후 로딩은 매우 빠르다.SEO 검색에 취약하다. (요즘에는 조금 덜 하다.)서버 부하가 상대적으로 낮다. Server-Side Rendering첫 로딩이 느릴 일은 없지만, 페이지마다 로딩이 걸린다SEO 검색에 강하다.서버 부하가 상대적으로 높다.
백엔드
・
워밍업클럽스터디
・
백엔드
・
자바
・
스프링부트
2024. 03. 07.
0
[인프런 워밍업 클럽 스터디] 13일차 - Spring Boot 설정, 버전업 이해하기
build.gradle빌드 스크립트라고도 불리며, gradle을 이용해 프로젝트를 빌드하고 의존성을 관리하기 위해 작성되었다.groovy 언어를 사용해 작성되었고, Kotlin이라는 언어를 사용할 수도 있다. org.springframework.boot 플러그인 역할스프링을 빌드했을 때 실행가능한 jar 파일이 나오게 도와주고스프링 애플리케이션을 실행할 수 있게 도와주고또 다른 플러그인들이 잘 적용될 수 있게 해준다. Spring 과 Spring Boot 의 차이점1. 간편한 설정2. 간단한 의존성 관리3. 강력한 확장성MSA에 적합한 모니터링 Lombokgetter, setter, 생성자와 같은 반복되는 보일러 플레이트 코드(boiler plate code)를 제거할 수 있다.lombok 의존성 추가IntelliJ lombok 플러그인 추가IntelliJ Annotation Processor 설정 Spring Boot 2.7.x 에서 3.0.x 로 업데이트 하기Java 최소 버전이 17로 업그레이드 되었다.많은 스프링 프로젝트, Thrid-party Library 가 버전업 되었다.AOT 기초 작업이 이루어졌다. AOT(Ahead of Time) 빌드를 할 때 스프링 애플리케이션을 분석하고 최적화하는 도구애플리케이션 시작 시간과 메모리 사용량을 줄일 수 있게 해준다.javax 대신 jakarta 패키지를 사용하게 된다.모니터링 기능들의 강화외의 다양한 세부적인 변경사항이 많음
백엔드
・
워밍업클럽스터디
・
백엔드
・
자바
・
스프링부트
2024. 03. 07.
0
[인프런 워밍업 클럽 스터디] 12일차 - AWS와 EC2 배포
Section 7. 생애 최초 배포하기[목표]EC2에 접속하는 방법을 알아보고, EC2에 접속해 리눅스 명령어를 다뤄본다.개발한 서버의 배포를 위해 환경 셋팅을 리눅스에서 진행하고, 실제 배포를 진행한다.foreground와 background의 차이를 이해하고 background 서버를 제어한다.도메인 이름을 사용해 사용자가 IP 대신 이름으로 접속할 수 있도록 한다.[리눅스 기본 명령어]mkdir : 폴더를 만드는 명령어ls : 현재 위치에서 폴더나 파일을 확인하는 명령어ls -l : 조금 더 자세한 정보를 확인할 수 있다.cd : 폴더 안으로 들어가는 명령어pwd : 현재 위치를 확인하는 명령어cd .. : 상위 폴더로 올라가는 명령어rmdir : 비어있는 폴더(디렉토리)를 제거하는 명령어 sudo yum update : 관리자의 권한으로 설치되어 있는 여러 프로그램을 최신화한다.sudo yum install [프로그램이름] : 관리자의 권한으로 프로그램을 설치한다.sudo systemctl status [프로그램이름] : 프로그램의 상태를 확인한다.suto systemctl restart [프로그램이름] : 프로그램을 재시작한다.chmod : 파일이나 폴더의 권한을 변경한다.ctrl + c : foreground로 실행중인 프로그램을 중단하는 신호nohup [명령어] & : [명령어]를 background에서 동작하게 만드는 명령어rm : 파일을 제거하는 명령어 ps aux : 현재 실행중인 프로그램 목록을 확인할 수 있다. kill -9 [프로그램번호] : 해당 프로그램을 종료시킨다. vi : 리눅스 편집기인 vim을 사용하여 파일을 연다.cat : 파일에 있는 내용물을 모두 출력하는 명령어 tail : 현재 파일의 끝 부분을 출력하는 명령어 tail -f : 현재 파일의 끝 부분을 실시간으로 출력해준다.
백엔드
・
워밍업클럽스터디
・
백엔드
・
자바
・
스프링부트
2024. 03. 06.
0
[인프런 워밍업 클럽 스터디] 11일차 - 기본적인 배포를 위한 준비
Section 6. 생애 최초 배포 준비하기[목표]배포가 무엇인지 이해하고, 배포를 하기 위해 어떤 준비를 해야 하는지 알아본다.스프링 서버를 실행할 때 DB와 같은 설정들을 코드 변경 없이 제어하는 방법을 알아본다.git과 github의 차이를 이해하고, git에 대한 기초적인 사용법을 알아본다.AWS의 EC2가 무엇인지 이해하고, AWS를 통해 클라우드 컴퓨터를 빌려 본다.[배포]최종 사용자에게 SW를 전달하는 과정--> 전용 컴퓨터에 우리의 서버를 옮겨서 실행시키는 것[git 이란 무엇인가?]코드를 쉽게 관리할 수 있도록 해주는 버전 관리 프로그램[github 이란 무엇인가?]git으로 관리되는 프로젝트의 코드가 저장되는 원격 저장소
백엔드
・
워밍업클럽스터디
・
백엔드
・
자바
・
스프링부트
2024. 03. 06.
0
[인프런 워밍업 클럽 스터디] 10일차 - 객체지향과 JPA 연관관계
[1 : 1 관계][연관관계의 주인]Table을 보았을 때 누가 관계의 주도권을 가지고 있는가연관관계의 주인이 아닌 쪽에 mappedBy 옵션을 달아 주어야 한다.연관관계의 주인의 값이 설정되어야만 진정한 데이터가 저장된다.객체가 연결되는 기준이 된다. [연관관계의 주인 효과]상대 테이블을 참조하고 있으면 연관관계의 주인연관관계의 주인이 아니면 mappedBy를 사용연관관계의 주인의 setter가 사용되어야만 테이블 연결 [N : 1 관계] - @ManyToOne 과 @OneTOMany@JoinColumn연관관계의 주인이 활용할 수 있는 어노테이션.필드의 이름이나 null 여부, 유일성 여부, 업데이트 여부 등을 지정 [N : M 관계] - @ManyToMany구조가 봅잡하고, 테이블이 직관적으로 매핑되지 않아 사용하지 않는 것을 추천 cascade 옵션 : 한 객체가 저장되거나 삭제될 때, 그 변경이 폭포처럼 흘러 연결되어 있는 객체도 함께 저장되거나 삭제되는 기능orphanRemoval 옵션: 객체간의 관계가 끊어진 데이터를 자동으로 제거하는 옵션 [연관관계 정리]상대 테이블을 가리키는 테이블이 연관관계의 주인이다. 연관관계의 주인이 아닌 객체는 mappedBy를 통해 주인에게 매여 있음을 표히새 주어야 한다.양쪽 모두 연관관계를 갖고 있을 때는 양쪽 모두 한 번에 맺어주는게 좋다.cascade 옵션을 활용하면, 저장이나 삭제를 할 때 연관관계에 놓인 테이블까지 함께 저장 또는 삭제가 이루어진다.orphanRemoval 옵션을 활용하면, 연관관계가 끊어진 데이터를 자동으로 제거해준다. [연관관계를 사용하면 무엇이 좋을까?]각자의 역할에 집중하게 된다.(응집성)새로운 개발자가 코드를 읽을 때 이해하기 쉬워진다.테스트 코드 작성이 쉬워진다.[연관관계를 사용하는 것이 항상 좋을까?]지나치게 사용하면, 성능상의 문제가 생길 수도 있고 도메인 간의 복잡한 연결로 인해 시스템을 파악하기 어려워질 수 있다.또한 너무 얽혀 있으면, A를 수정했을 때 B, C, D 까지 영향을 받을 수 있다.그렇기 때문에 비즈니스 요구사항, 기술적인 요구사항, 도메인 아키텍처 등 여러 부분을 고민해서 연관관계 사용을 선택해야 한다. Section 5. 정리책 생성, 대출, 반납 API를 온전히 개발하며 지금까지 다루었던 모든 개념을 실습해본다.객체지향적으로 설계하기 위한 연관관계를 이해하고, 연관관계의 다양한 옵션에 대해 이해한다.JPA에서 연관관계를 매핑하는 방법을 이해하고, 연관관계를 사용해 개발할 때와 사용하지 않고 개발할 때의 차이점을 이해한다.
백엔드
・
워밍업클럽스터디
・
백엔드
・
자바
・
스프링부트
2024. 03. 05.
0
[인프런 워밍업 클럽 스터디] 9일차 - 조금 더 복잡한 기능을 API로 구성하기
Section 5. 책 요구사항 구현하기[목표]책 생성, 대출, 반납 API를 온전히 개발하며 지금까지 다루었던 모든 개념을 실습해본다.객체지향적으로 설계하기 위한 연관관계를 이해하고, 연관관계의 다양한 옵션에 대해 이해한다.JPA에서 연관관계를 매핑하는 방법을 이해하고, 연관관계를 사용해 개발할 때와 사용하지 않고 개발할 때의 차이점을 이해한다.SQL 대신 ORM을 사용하게 된 이유 중 하나는 DB 테이블과 객체는 패러다임이 다르기 때문!-> DB 테이블에 데이터를 저장하는 것은 필수이다.-> Java 언어는 객체지향형 언어이고, 대규모 웹 애플리케이션을 다룰 때에도 절차지향적인 설계보다 객체지향적인 설계가 좋다.-> User와 UserLoanHistory가 직접 협업할 수 있게 처리 할 수는 없을까?-> 다음 강의에 계속
백엔드
・
워밍업클럽스터디
・
백엔드
・
자바
・
스프링부트
2024. 03. 04.
0
[인프런 워밍업 클럽 스터디] 8일차 - 트랜잭션과 영속성 컨텍스트
[트랜잭션이란?]쪼갤 수 없는 업무의 최소 단위--> 한 번에 성공하거나, 한 번에 실패하거나! [주의사항]IOException과 같은 Checked Exception은 롤백이 일어나지 않는다. [영속성 컨텍스트란?]테이블과 매핑된 Entity 객체를 관리/보관하는 역할--> 스프링에서는 트랜잭션을 사용하면 영속성 컨텍스트가 생겨나고, 트랜잭션이 종료된면 영속성 컨텍스트가 종료된다. [영속성 컨텍스트의 특수능력 4가지]변경 감지 Dirty Check : 영속성 컨텍스트 안에서 불러와진 Entity는 명시적으로 save하지 않더라도, 변경을 감지해 자동으로 저장된다.쓰기 지연: DB의 INSERT/UPDATE/DELETE SQL을 바로 날리는 것이 아니라, 트랜잭션이 commit될 때 모아서 한번만 날린다.1차 캐싱: ID를 기준으로 Entity를 기억한다. 이렇게 캐싱된 객체는 완전히 동일하다.지연 로딩(Lazy Loading) : 지연 로딩을 사용하게 되면, 연결되어 있는 객체를 꼭 필요한 순간에만 가져온다.
백엔드
・
워밍업클럽스터디
・
백엔드
・
자바
・
스프링부트
2024. 03. 03.
0
[인프런 워밍업 클럽 스터디] 2주차 발자국
2주차 진행 순서 [6일차]스프링 컨테이너의 의미와 사용방법 [7일차]Spring Data JPA를 사용한 데이터베이스 조작 [8일차]트랜잭션과 영속성 컨텍스트 [9일차]조금 더 복잡한 기능을 API로 구현하기 [2주차 회고]이번주 목록 중 가장 기억에 남는 것은 역시 JPA였다. 그동안 MyBatis로 작업했던 것들과 한참 다른 방식에 헤메기도 하고 신기하기도 했다. 같은 결과를 내지만 전혀 다른 동작 과정을 거쳤고 배우면 배울수록 이와 같은 일들이 많아지는 것 같다. 수업 중반부에 들어서면서 미니 과제가 끝나게 되고 미니 프로젝트가 시작되었다. 그동안 배운 것들로 시작하려 했으나 공부가 좀 더 필요한 것 같아 남은 과정은 조금 천천히 진행하려 한다.
백엔드
・
워밍업클럽스터디
・
백엔드
・
자바
・
스프링부트
2024. 02. 27.
0
[인프런 워밍업 클럽 스터디] 7일차 - Spring Data JPA를 사용한 데이터베이스
Section 4. 생애 최초 JPA 사용하기[목표]문자열 SQL을 직접 사용하는 것의 한계를 이해하고, 해결책인 JPA, Hibernate, Spring Data JPA가 무엇인지 이해한다.Spring Data JPA를 이용해 데이터를 생성, 조회, 수정, 삭제할 수 있다.트랜잭션이 왜 필요한지 이해하고, 스프링에서 트랜잭션을 제어하는 방법을 익힌다.영속성 컨텍스트와 트랜잭션의 관계를 이해하고, 영속성 컨텍스트의 특징을 알아본다.[SQL을 직접 작성하면 아쉬운 점]문자열을 작성하기 때문에 실수할 수 있고, 실수를 인지하는 시점이 느리다.특정 데이터베이스에 종속적이게 된다.반복 작업이 많아진다. 테이블을 하나 만들 때 마다 CRUD 쿼리가 항상 필요하다.데이터베이스의 테이블과 객체는 패러다임이 다르다.===> 그렇기 때문에 등장한 것이 JPA(Java Persistence API) [JPA란?]객체와 관계형 DB의 테이블을 짝지어 데이터를 영구적으로 저장할 수 있도록 정해진 Java 진영의 규칙이것을 코드로 구현한 것이 Hibernate. Hibernate는 JDBC를 내부적으로 사용한다. [JPA 어노테이션]@Entity : 스프링이 User 객체와 user 테이블을 같은 것으로 바라본다. 기본생성자 꼭 필요함.@Id : 이 필드를 primary key로 간주한다.@GeneratedValue : primary key는 자동 생성되는 값이다.@Column : 객체의 필드와 Table의 필드를 매핑한다. 이름이 같을 시 생략 가능. [spring.jpa.hibernate.ddl-auto]create: 기존 테이블이 있다면 삭제 후 다시 생성create-drop: 스프링이 종료될 때 테이블을 모두 제거update: 객체와 테이블이 다른 부분만 변경validate: 객체와 테이블이 동일한지 확인none: 별다른 조치를 하지 않는다 [지금까지 사용한 JPA Repository 기능]save: 주어지는 객체를 저장하거나 업데이트 시켜준다.findAll: 주어지는 객체가 매핑된 테이블의 모든 데이터를 가져온다.findById: id를 기준으로 특정한 1개의 데이터를 가져온다. [Spring Data JPA]복잡한 JPA 코드를 스프링과 함께 쉽게 사용할 수 있도록 도와주는 라이브러리 [JPA Repository에서 By 앞에 들어갈 수 있는 구절 정리]find: 1건을 가져온다. 반환 타입은 객체가 될 수도 있고, Optional이 될 수도 있다.findAll: 쿼리의 결과물이 N개인 경우 사용. List 반환.exists: 쿼리 결과가 존재하는지 확인. 반환 타입은 boolean.count: SQL의 결과 개수를 센다. 반환 타입은 long. [JPA Repository에서 By 뒤에 들어갈 수 있는 구절 정리]GraterThan: 초과GraterThanEqual: 이상LessThan: 미만LessThanEqual: 이하Between: 사이에StartsWith: ~로 시작하는EndsWith: ~로 끝나는 [과제]진도표 7일차와 연결됩니다우리는 JPA라는 개념을 배우고 유저 테이블에 JPA를 적용해 보았습니다. 몇 가지 문제를 통해 JPA를 연습해 봅시다! 🔥
백엔드
・
워밍업클럽스터디
・
백엔드
・
자바
・
스프링부트
2024. 02. 27.
0
[인프런 워밍업 클럽 스터디] 6일차 - 스프링 컨테이너의 의미와 사용 방법
[정리] Section 3. 역할의 분리와 스프링 컨테이너좋은 코드가 왜 중요한지 이해하고, 원래 있던 Controller 코드를 보다 좋은 코드로 리팩토링 한다.스프링 컨테이너와 스프링 빈이 무엇인지 이해한다.스프링 컨테이너가 왜 필요한지, 좋은 코드와 어떻게 연관이 있는지 이해한다.스프링 빈을 다루는 여러 방법을 이해한다. 클래스 : 객체를 정의해놓은 설계도. 객체를 생성하기 위해 사용된다.객체 : 클래스에 정의된 내용이 인스턴스화되어 실제로 생성된 것. 설계도를 통해 만들어진 집.인스턴스(화) : 클래스를 실제로 사용할 수 있도록 생성하는 것. 스프링 빈 (UserController에 @RestController를 붙여줌으로써 스프링 빈이 됨)서버가 시작되면 스프링 서버 내부에 거대한 컨테이너(클래스 저장소)를 만든다.컨테이너 안에는 클래스가 들어간다.이 때 다양한 정보도 함께 들어있고, 인스턴스화도 이루어진다.이때 스프링 컨테이너 안으로 들어간 클래스를 스프링 빈이라고 한다.JdbcTemplate도 스프링 빈으로 등록되어 있다. (Dependency가 등록해 주고 있음)스프링 컨테이너는 필요한 클래스를 연결해준다. 서버가 시작되면 일어나는 일스프링 컨테이너(클래스 저장소)가 시작된다.기본적으로 많은 스프링 빈들이 등록된다.우리가 설정해 준 스프링 빈이 등록된다.이 때 필요한 의존성이 자동으로 설정된다. 스프링 빈을 등록하는 방법@Configuration클래스에 붙이는 어노테이션@Bean을 사용할 때 함께 사용해야 한다. @Bean메소드에 붙이는 어노테이션메소드에서 반환되는 객체를 스프링 빈에 등록한다. @Service - @Repository 사용할 때 개발자가 직접 만든 클래스를 스프링 빈으로 등록할 때 @Configuration - @Bean 사용할 때외부 라이브러리, 프레임워크에서 만든 클래스를 등록할 때알아볼 어노테이션@Component주어진 클래스를 '컴포넌트'로 간주한다. 이 클래스들은 스프링 서버가 뜰 때 자동으로 감지된다.@Qualifier스프링 빈에 이름을 지정함으로써 특정 클래스를 가져옴 스프링 빈을 가져오는 방법(가장 권장) 생성자를 이용해 주입받는 방식 : @Autowired 생략 가능setter와 @Autowired 사용 : 누군가 setter를 사용하면 오작동 할 수 있다.필드에 직접 @Autowired 사용 : 테스트를 어렵게 만드는 요인이다. 참고자료 : https://mihee0703.tistory.com/182
백엔드
・
워밍업클럽스터디
・
백엔드
・
자바
・
스프링부트