스프링은 tomcat이라는 서버를 내장하고 있다. /hello가 들어오면 tomcat이 스프링한테 던져준다. 그럼 controller에 있는 url에 매칭이 되고 메서드가 실행이 된다. 그 후 model에 값을 담아주고 return "hello"; 즉 resources -> tempaltes -> hello.html를 찾아서 랜더링을 해라. 라는 뜻...
김영한 님 강의를 듣고 있는데 너무 어렵다,, 누군가에게는 기초일 텐데,, 진짜 노력을 많이 해야겠다. 꾸준히 하다 보면 실력도 늘 거라고 생각한다. DI(Dependency Injection), 의존성 주입 - 객체 의존관계를 외부에서 넣어주는 것. 의존적인 객체를 직접 생성/제어가 아닌특정 객체에 필요한 객체를 외부에서 결정 후 연결시키는 것을 말한다...
spring 에 대해서 공부를 시작했다. 좋은 팀원들과 강의가 있어서 마음의 위안을 삼고 열심히 해보려고 한다. 이번 포스팅에서는 각 에노테이션의 사용법과 Lombok, api, DTO, ARC 등 을 정리하려고 한다. 사용하는 RDBMS는 H2이다. 서버가 작동을 멈추면 데이터가 모두 삭제되지만 가벼워서 좋다. H2 설정부터 해주자. applica...
지난 포스팅과 바로 이어지는 글이다. GET, POST, PUT, DELETE를 다뤄보자. 먼저 controller pakage와 그 밑에 CourseController를 만들어주자. 조회 GET /api/courses 이 친구로 접근하면 repo에 있는 데이터를 findAll() 해주는 것이다. 결과는 Json값으로 나온다. 생성 Post p...
오늘은 Timline Service라는 것을 구현(따라치기)했다. 글 쓰기, 수정, 삭제가 되며 업로드 순으로 정렬을 하는 기능까지 있다. 추후에 게시글이 24시간 유지되는 것도 해보았다. Memo의 CRUD 이다. 맨 위에는 정보를 받아 save() 해주는 기능이다.(post) 받은 정보를 저장하기 위해 @RequestBody 에노테이션을 꼭 붙여...
(week04) 대학 다닐 때 Tmap의 지도api를 활용해 프로젝트를 진행한 적이 있다. 그때는 효율성은 알지도 못했고 무지성 복붙과 한 class 안에 때려박는 정말 대단한 일을 했었다. 또 소스 관리는 카톡 알집,, 지나고 보면 다 추억이네,, 무튼 오늘은 Naver에서 제공하는 쇼핑 api를 사용해봤다. 발급받는 과정은 생략했다. 이 친구들을 잘...
이 친구 에 추가??로 한 느낌? MVC1, MVC2 차이점도 있다. 되게 간단하게. MVC(Model-View-Controller)란? Spring 프레임워크에서 제공하는 웹 모듈이다. 소프트웨어의 비즈니스 로직과 화면을 구분을 하고, Model, View, Controller로 분리하여 개발하는 디자인 패턴이다. Model 데이터와 비즈니스 로직을...
스프링 시큐리티란? 스프링 시큐리티 프레임워크는 스프링 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공해 준다. 프레임워크 추가 * -build.gradle- * -WebSecurityConfig.java- 허용을 해주는 부분이 중요한 것 같다. -UserDetailsServiceImpl.java- UserDetailsService라는 인터페...
강의를 다 듣고 코드를 맨지면서 내가 놓쳤던 부분이 뭐였는지, 코드의 흐름은 어떻게 흘러가는지 복기?? 하는 편이다. 그러다 코린이인 내가 궁금한 게 갑자기 생겼다. 응애 진짜 초보자니깐 코드 30줄 이상 짜보신 분들은 뒤로가기 추천😢 위에 친구는 왜 memoRepository에 .save() 를 해주지 않아도 값이 들어가고 아래 친구는 생성자로 값을...
관점지향 프로그래밍(Aspect Oriented Programming/AOP) 공통로직을 외부 클래스로 분리하고, 해당 기능을 프로그램 코드에 명시적으로 표시하지 않고 선언적으로 처리해서 적용한다. 응집도가 높고 유지보수가 쉽다. POJO(Plain Old Java Object) 기반의 구성 Java 코드에서 일반적으로 객체를 구성하는 방식을 스프링 프레...
과제가 끝나면 error 노트와 이 차이점을 공부해서 정리하고 싶었다. 대충대충은 알지만 정확히 얕게라도 알고 싶어서 정리해본다. 왜 정리하고 싶었냐면 저 두 개의 혼동으로 인해서 에러를 잡고 있었다... @Controller 와 @RestController 이 두가지의 주요 차이점은 HTTP ResponseBody가 생성되는 방식이다. @Contro...
항해를 진행하면서 더 많은 공부를 해야겠다 다짐을 하고 김영한님의 자바 ORM 표준 JPA 프로그래밍과 MVC 기본편? 강의를 구입했다. gradle만 사용해봤는데 ORM 표준 강의는 MAVEN을 사용한다. 열공~!~!~!~!~!~!~! JPA란? JPA는 자바 진영에서 DB 테이블과 자바 객체 사이의 매핑을 처리해주는 ORM(Object-relatio...
이번 포스팅은 매핑과 연관관계에 대해서 정리해 보려고 한다. @Entity - JPA를 사용해서 테이블과 매핑할 클래스에 붙여준다. > - 기본 생성자는 필수다.(public, protected) final클래스, enum, interface, inner 클래스는 사용할 수 없다. @Table - 매핑할 테이블 이름 ex) @Table(name = "...
바로 시작! Member 와 Team은 N:1 이다. Member를 가져와야 할 때 Team의 데이터도 같이 가져온다. 물론 Team 테이블도 사용할 때는 좋지만 사용하지 않을때는 낭비지 않을까? 그래서 JPA에서는 이것을 프록시, 지연로딩으로 잡는다고 한다. 프록시란? 실제 엔티티 객체 대신에 사용되는 객체이다. em.find() - 데이터베이스를...
JPA의 데이터 타입 분류 엔티티 타입 > • @Entity로 정의하는 객체 • 데이터가 변해도 식별자로 지속해서 추적 가능 ex) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 > • int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 • 식별자가 없고 값만 있으므로 변경시 추적 불가 • ...
JPA의 다양한 쿼리 지원 방법 JPQL(Java Persistence Query Language) SQL을 추상화한 객체 지향 쿼리 언어이다. > JPQL은 엔티티 객체를 대상으로 쿼리한다. SQL은 데이터베이스 테이블을 대상으로 쿼리한다 예제 그래도 SQL 을 멀리서 지켜봤던 나로서는 저 정도는 어떤 쿼리인 지 알 수 있었다. username...
새로운 강의는 늘 설레는 거 같다. 파이팅!!!! 설계 단계 복습하면서 정리 > 1. @Embeddable -valueClass 안에 @Enumerated(EnumType.STRING) - valueClass 쓰는 곳에 private DeliveryStatus status; // READY, COMP 한쪽만 써도 된다. -
테스트 코드가 중요한 것을 알고 부랴부랴 공부하면서 진행하고 있다. 오늘은 테스트코드와 프론트쪽 요구사항을 듣고 설계를 바꾸는 데 시간을 많이 썻던 것 같다. 물론 두 가지 다 리더분이 잘해주셔서 도움도 받고 캐리? 받고있는 상황인 거 같다. 테스트 코드를 하면서 배웠던 걸 간단하게 정리해보려고 한다. 1. registerTodo에서 터지는 Illega...
spring을 공부하면서 메일 전송 쪽 기능을 구현해보고 싶어서 이 기능을 해봤다. 프론트가 한 분이셔서 이 기능이 들어갈 지는 모르겠지만 해보고 싶어서 해봄용 필요한 의존성 이메일 설정(.properties) 비밀번호를 찾는 사용자들에게 메일을 보내줘야 하는데, 그 이메일에 대한 정보를 써준다. 특히 저 마지막줄에 있는 spring.mail.pro...
먼저 CI와 CD를 알아보자! CI/CD란? 애플리케이션 개발 단계부터 배포 때까지의 단계를 자동화해 효율적이고 빠르게 사용자에게 빈번히 배포할 수 있는 것이다. CI - 지속적인 통합(Continuous Integration) > - 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 병합되는 것이다. Build , Test 를 실...
스코프가 줄은 만큼 백에서 할 수 있는 것을 찾고있다. 프론트 분이 고생이 많으신데 페이스 조절을 잘 하셨으면 좋겠다. swagger란? Swagger란 개발한 REST API를 편리하게 문서화 해주고, 이를 통해서 편리하게 API를 호출해보고 테스트할 수 있는 프로젝트이다. SpringBoot 프로젝트의 문서화를 위해 Swagger를 적용한다. 적용 ...
이 두 링크에 정리를 해놓았다. https://velog.io/@junsj119/WIL06.2707.02 https://velog.io/@junsj119/WIL07.1107.16 확장 기능, 스프링 데이터 JPA 분석 그리고 나머지 기능들 이 세 가지 챕터는 나중에 필요할 때 들을 예정이다! 처음 spring을 접했을 때보다 눈에 보이는 게 많았고,...
QueryDsl 프로젝트 셋팅 build.gradle 추가된 부분은 주석으로 표시해놨다. 버전 문제로 몇 가지 더 추가 해놓았다. 그 후 밑에 순서대로 진행해준다. > - Gradle -> build -> clean Gradle -> other -> compileQueryDsl 실행하면, build.gradle 에서 설정한 경로('def queryd...
프로젝션 - 기본 tuple은 repopsitory 안에서만 사용할 때 쓰는 것을 권장! 만약 외부로 나가야 한다면 Dto 고고!! 프로젝션 - DTO 먼저 JPQL 에서는 어떻게 쓸까? 전에도 정리했다시피 앞에 파일 경로를 다 적어줘야 한다! 자 그럼 이제 중요한 Dto 사용법 세 가지를 알아보자!! > 프로퍼티 접근 필드 직접 접근 생성자 사용 ...
프로젝트 중 사용자가 투두를 달성한 갯수와 획득한 경험치량을 통계로 보여줘야 하는 api를 만들어야 했다. 일간, 주간, 월간 세 가지가 있었다. 먼저 일간은 현재 날짜 기준 하루 전 부터 일주일 동안을 보여주었고, 주간은 4주 전까지, 월간은 6달 전까지 보여주었다. 먼저 Querydsl를 공부하고 있었고 장점이 많아서 적용을 시키기로 결정했다! ...
프로젝트를 진행하면서 테스트 코드를 일부 작성해봤다. 나머지는 팀원 한 분이 맡아서 하셨다. service 쪽 테스트 코드를 짜봤는데 맞는지 아닌지도 잘 모르겠고, controller 테스트 코드도 있는 것을 안 후로 공부를 조금 해보았다. > @WebMvcTest 를 사용한 이유는 @SpringBootTest 를 사용하면 실제 어플리케이션 설정을 모두 ...
순수 JPA 리포지토리와 Querydsl 방법 1 방법 2 동적 쿼리와 성능 최적화 조회 - Builder 사용 StringUtils.hasText
면접 준비를 하고있다. 진짜 엄청 많이 부족하다는 것을 느꼈고, 그 중에서 하나를 정리해보려고 한다. 웹 개발을 하다보면 비즈니스 로직 앞, 뒤로 공통적으로 처리해야 될 기능들이 존재한다. ex) 로그, 인증, 인가 등등 공통으로 빼서 따로 관리를 하는 것이 AOP라고 생각했다. 하지만 Filter와 Interceptor도 있다는 것을 알게 되었고, ...
스프링 컨테이너 생성 과정 1. 스프링 컨테이너 생성 2. 스프링 빈 등록 스프링 빈 저장소에 있는 빈들을 등록한다. @Bean을 보고 싹 다 호출을 한다. 빈 이름은 메서드 이름을 사용하지만 직접 부여할수도 있다. ex) @Bean(name = "qqqqq") Bean 이름은 절대 중복 금지!!!! 3. 스프링 빈 의존관계 설정 ![](https:...
프로젝트를 하면서 동시성 문제가 무엇인지는 대충 알았어도 적용을하고, 고려하며 코드를 짜본 적은 없다. 그래서 간단하게나마 알아보려고한다! 트랜잭션 격리수준 동시에 여러 트랜잭션을 처리할 때, 해당 트랜잭션이 다른 트랜잭션에서 변경한 데이터를 볼 수 있는 기준을 결정하는 것이다. 격리수준은 크게 4가지로 나뉜다. > **READ UNCOMMITTED ...
프로젝트를 진행하면서 구축한 환경 자체를 모니터링하고, 문제가 생길 경우 적절한 조치를 빠르게 취하기위해 모니터링 도입하기로 결정을 하였다. Actuator > Spring Boot에서는 어플리케이션을 모니터링, 관리하는 기능을 제공해주는데 그것을 Actuator 라고 한다. Prometheus > metric을 수집하고 모니터링 및 알람에 사용되는 ...