블로그
전체 3#카테고리
- 백엔드
#태그
- 백엔드
- 워밍업
- 스터디
![[인프런 워밍업 클럽 1기/BE] 세번째 발자국](https://cdn.inflearn.com/public/files/blogs/cf403daa-9759-4898-be42-515c52050230/fd.png?w=260)
2024. 05. 19.
0
[인프런 워밍업 클럽 1기/BE] 세번째 발자국
JPA 연관관계좀 더 객체지향적으로 개발하기연관관계의 주인주인이 아닌곳에 mappedBy 설정객체가 연결되는 기준1:1 관계 @OneToOne 어노테이션 설정트랜잭션이 끝나지 않은 시점 조심setter 안에서 객체끼리 완전히 연결로 해결1:N 관계 @ManyToOne @OneTonMany 사용연관관계 주인은 많은 쪽단방향으로 사용가능함@JoinColumn 주인에게 사용가능한 어노테이션 null 여부, 유일성 여부, 업데이트 가능 여부 설정가능N:M 관계@ManyToMany복잡해서 1:N 을 활용 cascade삭제할 때 연관관계에 놓인 테이블까지 함께 삭제 ophanRemoval 연관관계가 끊어진 데이터를 자동으로 제거 연관관계를 무조건 사용하는것이 좋은가?아님. 지나치게 사용하면 성능 문제와 복잡해짐Service 코드가 간결해지고, 도메인 계층에 비즈니스 로직이 들어가는 장점이있음Gitgit : 코드를 쉽게 관리할 수 있도록 해주는 버전 관리 프로그램github : github 은 git 으로 관리되는 프로젝트의 코드가 저장되 는 저장소git init : git으로 관리하겠다!git add . : 모든 프로그램을 올리겠다git status : 상태를 확인하겠다git commit -m "메시지" : 깃 메시지를 작성하겠다.git push : 깃을 올리겠다. 배포리눅스 명령어mkdir : 폴더를 만드는 명령어rmdir : 폴더를 제거하는 명령어cd : 현재 위치를 변경하는 명령어cd .. : 상위 폴더로 이동한다pwd : 현재 위치를 확인하는 명령어ls : 현재 위치에 있는 폴더와 파일을 확인하는 명령어ls -l : 조금 더 자세한 정보를 표시할 수 있다.리눅스에 프로그램 설치git 설치, java설치, MySql 설치를 해줘야함background 실행꺼져도 뒤에서 계속 프로그램이 돌아가는 상태3주차 회고이번주 강의를 들으면서 특히 배포를 처음 경험 해보았다. 항상 프로젝트를 할 때 마다 배포를 하는 역할을 맡지않아서 낯설었다. aws에도 처음 회원가입을 했봤다.... 리눅스 명령어들이 아직 익숙하지않아서 어려웠는데 익숙해질 때까지 몇번 연습을 해봐야할 것 같다. 미니프로젝트도 완성하면 도메인도 사서 제대로 배포를 한번더 해봐야할 것 같다. 깃은 평소에 자주 사용해서 익숙했다. 라이브세션도 도움이 많이되었는데 앞으로 프로젝트를 어떤방향으로 해야할지에 대해서도 많은 도움이되었다. 3주간의 공식적인 스터디시간이 거의 끝났는데 남은 미니프로젝트도 좀 더 집중해서 해야겠다.
백엔드
・
백엔드
・
워밍업
・
스터디
![[인프런 워밍업 클럽 1기/BE] 두번째 발자국](https://cdn.inflearn.com/public/files/blogs/ee9e9eba-a155-4242-a897-be627d6b8c15/fd.png?w=260)
2024. 05. 12.
0
[인프런 워밍업 클럽 1기/BE] 두번째 발자국
스프링 컨테이너스프링이 시작될 때스프링 서버 내부에 거대한 컨테이너를 만듬 컨테이너에 들어가는 -> 클래스 -> 들어간 클래스 = 스프링 빈@RestController - Controller 클래스를 API 진입 지점으로 만들고 스프링 빈으로 등록시킴@Repository - Repository를 스프링 빈으로 등록할 때 사용@Service - Service를 스프링 빈으로 등록할 때 사용 스프링 컨테이너 사용 이유제어의 역전(IoC, Inversion of Control) - 컨테이너가 Repository 중 하나를 선택한 후, Service를 만듬. -> Service를 수정하지않고 Repository만 수정하면됨의존성 주입(Dependency Injection) - 컨테이너가 Service를 만들어 줄때 Repository 중 하나를 선택해서 넣어주는 과정@Primary 어노테이션을 사용해서 우선순위 설정 스프링 컨테이너에 빈 등록 방법@Configuration + @Bean 을 사용일반적으로 개발자가 직접 만든 클래스를 등록할떄는 @Service, @Repository를 사용외부 라이브러리나 프레임워크에서는 @Configuration + @Bean을 사용@Component - 클래스를 컴포넌트로 간주하고 스프링 서버가 뜰 때 자동으로 감지, 위의 어노테이션 모두 컴포넌트 어노테이션을 포함함(컨트롤러, 서비스, 레포지토리 아닌 추가적인 클래스 등록할 때 종종 사용)스프링 빈 주입받는 방법생성자를 이용해 주입(권장 방식)setter 사용필드에 직접 주입방식 JPA(Java Persistence API)문자열로 SQL을 작성하면 실수하기 쉽고, 실수를 늦게 발견하는 경우가 많음자바 진영의 ORM(Object-Relational Mapping)Hibernate로 구현Hibernate는 내부적으로 JDBC 사용 저장: save 메소드를 이용해 새로운 객체를 데이터베이스에 저장조회: findAll 메소드로 모든 유저 데이터를 조회업데이트: findById를 사용해 특정 유저를 찾은 후, 업데이트를 진행삭제: delete 메소드를 이용하여 데이터를 삭제추가적인 쿼리 작성법: findBy, findAllBy, existsBy, countBy 등 다양한 접두사를 사용하여 복잡한 쿼리도 간단하게 작성할 수 있습니다. 조건 연산자(예: GreaterThan, LessThan 등)를 이용해 더 세밀한 쿼리도 가능트랜잭션 개념트랜잭션 정의: 쪼갤 수 없는 업무의 최소 단위필요성: 여러 작업을 한 묶음으로 처리하여 모두 성공하거나 실패하게 하는 것 트랜잭션 필요 예시인터넷 쇼핑몰에서 주문, 포인트 적립, 구매 기록 저장 시 모든 과정이 함께 성공하거나 실패해야 함 트랜잭션 적용 방법SQL 명령어: start transaction; 후 commit; 또는 rollback;으로 처리코드 적용: @Transactional 어노테이션 사용 영속성 컨텍스트정의: Entity 객체를 관리/보관하는 역할특성: 트랜잭션 시작 시 생성되고 종료 시 소멸 영속성 컨텍스트 기능변경 감지(Dirty Check): Entity의 변경 사항 자동 감지 및 저장쓰기 지연: 트랜잭션 commit 시점에 모아둔 SQL을 한 번에 처리1차 캐싱: 동일 ID 조회 시 최초 한 번만 SQL 실행, 이후 캐시 데이터 활용트랜잭션 및 영속성 컨텍스트 적용 예@Transactional 사용하여 UserService에 트랜잭션 적용조회 시 readOnly=true 옵션으로 최적화 가능 과제 제출4일차 과제5일차 과제2주차 회고스프링 컨테이너에 대한 이해가 힘들었다. 스프링을 처음 사용한 건 아니라서 제어 역전, 의존성 주입등의 개념은 들어본적있지만 그것이 정확하게 어떤 개념인지 모르고 사용했었는데 강의를 통해서 조금이나마 이해된 것 같다. 스프링 컨테이너부분을 몇번씩 돌려본 것 같다.... 어렵다.. 이부분을 좀더 반복해서 들어야겠다. JPA도 역시 직접 sql 쿼리를 날려주는 것 보다 편한 것을 느꼈다. 간단하게 db에 접근이 가능했고 코드도 확실히 줄어들었음을 느꼈다. 트랜잭션에 대한 개념도 한번 다지기 좋았던 것같다. 영속성이란 부분에 대한 개념을 다시 생각해볼 수 있는 기회였다. 1주차에 비해 2주차는 조금 느슨해진감이 없지않아 있었다.... 3주차에는 불태울것이다! 2주차에 어려웠던 내용도 복습을 해야겠다.
백엔드
・
백엔드
・
워밍업
・
스터디
![[인프런 워밍업 클럽 1기/BE] 첫번째 발자국](https://cdn.inflearn.com/public/files/blogs/eec0185c-f824-4eef-b793-43b8de91b6c8/fd.png?w=260)
2024. 05. 05.
0
[인프런 워밍업 클럽 1기/BE] 첫번째 발자국
Section 1 - 생애 최초 API 만들기 Java를 공부하기 전에 알아두면 좋을 것들 #1 #2JVM: 자바 가상 머신, 컴파일된 코드를 읽고 실행JDK: JVM을 포함해 자바 컴파일러(javac), 자바 실행 도구, 라이브러리 등 다양한 개발 도구 제공 HTTP, APIHTTP(Hypertext Transfer Protocol): 웹 브라우저가 웹 페이지를 요청하고 서버가 그에 대한 응답을 주는 기본적인 통신 규약API(Application Programming Interface): 소프트웨어 간의 상호작용을 위한 인터페이스를 제공정리컴퓨터간의 통신은 HTTP라는 표준화된 방식HTTP 요청은 HTTP Method (GET, POST)와 Path (/portion) 가 핵심요청에서 데이터를 전달하기 위한 2가지 방법은 쿼리와 바디HTTP 응답은 상태 코드가 핵심클라이언트와 서버는 HTTP를 주고 받으며 기능을 동작하는데 이때 정해진 규칙을 APIGET API, POST APIGET API는 쿼리로, POST API는 바디에 담아 보냄.(무조건은아님)DTO를 만들어서 구현가능 이경우 @RequestParam 제거 !과제 2일차 Section 2 - 생애 최초 Database 조작하기DBDB 없이 만들면 메모리에만 저장됨 => 데이터가 다날아감DB => 데이터를 구조화 시켜 저장 MySQL 연동application.yml 만들기JdbcTemplate 사용직접 sql을 연동하지 않고 JPA만 사용했던 경험이 있다.sql 쿼리를 직접 사용해서 db에 접근가능함도 알음 Section 3 - 역할 분리 클린코드코드만 보고 의미 파악할 수 있게 함함수는 최대한 작게 만들고 한 가지 일만 수행클래스는 작아야 하고 하나의 책임만 가져야 함유지보수도 좋음Controller 3단 분리Controller 역할 - API의 진입 지점으로써 HTTP Body를 객체로 변환Service 역할 - 현재 유저가 있는지, 없는지 등을 확인하고 예외 처리(메인 로직 수행)Repository 역할 - SQL을 사용해 실제 DB와의 통신을 담당Layered Architecture 1주차 회고스터디 시작전 모든 미션과 과제를 수행하고자 했는데 첫번째 과제부터 놓쳐버렸다... 남은 것들은 꼭 다하겠다.오랜만에 스프링을 다시 하는데 당시에 바로 jpa를 바로 사용해서 db랑 연동을 했었는데 쿼리로 연동하는 것도 알게 되었음. 기초가 중요하다.Java에 아직 덜 익숙함도 느꼈음. Java 다형성 부분에 대해서 다시 복습해야겠다.남은 스터디 기간에도 집중해서 꼭 많은 것을 얻어가는 시간이 되어야겠다.
백엔드
・
워밍업
・
백엔드
・
스터디




