View 환경설정공식문서 Welcome page(https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html해당 프로젝트의 static의 폴더 내에 i
정적 컨텐츠파일을 그냥 웹브라우저에 전달. 스프링부트는 정적 컨텐츠 기능을 기본으로 제공mvc와 템플릿 엔진서버에서 변형(html을 좀 바꾼) 후 내려주는 방식\*mvc = model + view + controllerAPIhtml을 내리는게 아니라 json이라는 데이
API 방식을 이용하면 viewResolver를 사용하지 않고, 대신에 http의 body부분에 해당 내용을 직접 반환한다. (html 전달 X)\*viewResolver를 사용하지 않기 위해 @ResponseBody를 추가해준다.이때 반환한 내용이 문자인지, 객체인지
강의 커뮤니티의 질문글을 보고, rest api에 대해 잠시 찾아봤다.mvc 패턴 구조에서는 view라는게 있지만 rest API 구조에서는 view와 관련된 처리가 없어지고 사용자에게 데이터만 응답하면 된다고 한다. nodejs로 백엔드 개발했을때와 다르게 sprin
스프링 DB 접근기술 이전 강의까지는 메모리에 값들을 저장했음 => 서버 다시 실행할때마다(스프링 다시 띄울 때마다) 값들 초기화됌 => DB에 값들을 저장하여 초기화 되는것을 막음 구조를 살펴보면, 스프링이 사용하는 인터페이스에 Repository 구현 객체를 대입
어노테이션 추가@SpringBootTest스프링 컨테이너와 테스트를 함께 실행@Transactional테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후 항상 롤백, DB에 데이터가 남지 않기 때문에 다음 테스트에 영향을 주지 않는다.기존 test파일, 스프링 컨터
질문 1)MemberServiceIntegrationTest 파일에서임의로 제가 "" 를 표시했는데,위 내용의 의미가 앱이 실행될때 @configuration 에서 @Bean 된 MemberService,MemberRepository 메서드를 찾아서 호출한다음 반환값을
인텔리제이 깃허브 연동 https://brunch.co.kr/@mystoryg/168
ObjectMapper는 Jackson 라이브러리에서 제공하는 클래스로, Java 객체와 JSON 데이터 간의 변환을 수행하는 데 사용됩니다. 주요 기능은 다음과 같습니다:Java 객체를 JSON 문자열로 변환ObjectMapper를 사용하여 Java 객체를 JSON
html을 "동적"으로 변형해서 웹브라우저에 반환하는 방법(프로그래밍 O)MVC: Model, View, Controller각 카테고리는 자신의 기능에만 충실해야한다(하는게 베스트다)우선적으로 controller 에서 해당 url 에 매칭되고, 해당 url 에 설정된
웹 브라우저 HelloController.java hello-template.html 기본적으로 required 속성이 true임, 바꾸고 싶으면 위의 코드처럼 바꿔줘야함 ?key=value 형식을 이용해 url에 매핑되는 controller의 메서드에 파라미터
HTTP의 Body에 내용을 직접 반환viewResolver 대신에 httpMessageConverter가 동작한다. 즉 html 파일을 찾아서 브라우저로 전달해주는게 아니라 내용(문자열, 객체)자체를 http의 body에 전달하는 것내용의 종류문자(문자열) - 문자
optional 객체에서 값을 꺼낼 땐 get() 메서드를 사용할 수 있다.ex)두 값이 동일한지 비교한다. 같으면 정상 동작하지만 다르면 에러를 발생시킨다.ex)
테스트 클래스의 @Test 가 붙은 함수를 테스트 함수라고 하고, 테스트 함수 각각을 실행할 수도 있고, 테스트 클래스를 실행하여 한번에 모든 테스트 함수를 실행할 수도 있다.테스트 케이스의 테스트 함수를 실행할때, 함수들끼리 의존관계가 있으면 안된다. 즉 테스트 함수
강의를 들으며 - @Configuration 과 싱글톤@Bean annotation on a static method궁금했던 것@Bean 에 등록된 static 메서드는 @Bean 에 등록되어 있음에도 불구하고 매번 새 객체를 반환하는 이유가 무엇인가?해결스프링 공식
AppConfig@CGLIB 예상 코드@Configuration 어노테이션이 적용된 "AppConfig"은 스프링 컨테이너에 관리되는 빈으로 등록되는것처럼 보이지만, 실제로 스프링은 CGLIB 를 사용하여 "AppConfig" 클래스를 상속받은 프록시 클래스인 "App
위 코드에서 @Embeddable가 뭐하는거야?@Embeddable은 JPA(Java Persistence API)에서 사용되는 어노테이션으로, 객체를 엔티티에 내장(embedded)하는 데 사용됩니다. 즉, 다른 엔티티의 속성으로 포함되어서 사용되는 "내장 타입"임을
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)의 기능이 뭐야?@Inheritance(strategy = InheritanceType.SINGLE_TABLE)은 JPA(Java Persistence API)에서 사용되는
위 코드에서 CascadeType.ALL의 기능이 뭐야?CascadeType.ALL은 JPA(Java Persistence API)에서 관계 매핑 시 사용되는 옵션 중 하나로, 연관된 엔티티들의 변경을 어떻게 처리할지 지정하는 것입니다. 즉, 부모 엔티티가 영속성 상태
위 코드의 primary key가 @Id가 붙은 id 필드야?네, 맞습니다. 주어진 코드에서 @Id 어노테이션이 id 필드에 붙어 있으므로, id 필드가 해당 엔티티의 주요 식별자(primary key)로 사용됩니다.@Id 어노테이션은 JPA에서 엔티티 클래스의 주요
업로드중..JPA 기술을 사용할때, 위 함수를 실행하여 order 엔티티의 특정 필드값을 변경시키면, 함수 종료후에 db에 변경사항이 자동으로 적용되는것 맞지?네, 맞습니다. 주어진 함수가 @Transactional로 표시되어 있다면, 함수 실행 중에 변경된 사항은 함
name 필드를 기준으로 Item 객체를 찾을때, 엔티티 매니저의 find 함수를 사용할 수는 없는거야?맞습니다! 엔티티 매니저의 find 함수를 사용하여 주어진 키 값에 해당하는 엔티티를 찾을 수 있습니다. 그러나 find 함수는 주로 기본 키(primary key)
//JPQL 이용주어진 코드는 JPQL(Querydsl 등)을 사용하여 Order 엔티티와 Member 엔티티를 조인하고, 조건에 따라 검색 결과를 반환하는 예제입니다.em.createQuery(): EntityManager의 createQuery() 메서드를 사용하여
@Transactional을 사용하면 기본적으로 테스트 메서드가 완료된 후 롤백된다. 따라서 롤백을 하지 않고 트랜잭션을 커밋하려면 특별한 설정이 필요하다.Spring의 @Transactional 어노테이션을 사용하여 롤백을 하지 않도록 설정하려면 트랜잭션 관리자에 대
: 둘다 외래 키 컬럼이 생성된다.@ManyToOne 만 사용한 경우, 외래 키 컬럼의 이름을 기본 규칙에 따라 생성한다.일반적으로 필드명(department)과 'Department' 엔티티의 기본 키(primary key)필드명을 조합하여 외래 키 컬럼의 이름을 설
input 태그의 name 이 @RequestParam 의 변수명과 같아야 한다.postman 에서는 다음과 같이 사용할 수 있다.get 요청에서 url 의 특정 부분을 변수로 가져올 수 있다. 이를 통해 다양한 status 값에 대해 하나의 @GetMapping 으로
Thymeleaf의 @{/style.css} 경로 표현식은 Spring Boot에서 정적 리소스를 찾는 데 사용되는 기본 경로 전략에 따라 상대적인 경로를 생성한다.기본적으로 Spring Boot는 클래스패스의 static 디렉토리에서 정적 리소스를 찾는다. 따라서 /
JPA(Java Persistence API)의 약자. 관계형 DB를 사용하는 방식을 정의한 "인터페이스" 이다.JPA는 말 그대로 인터페이스(특정 기능을 하는 라이브러리가 아님)이다.그럼 이 JPA를 어떻게 실제로 사용할 것인가 -> Hibernate 구현체를 사용한
DAO, DTO, Entity 의 차이에 대해 알아보자.실제로 DB에 접근하여 data 를 삽입, 삭제, 조회, 수정 등 CRUD 기능을 수행Service 와 DB를 연결하는 고리 역할을 수행스프링빈에 등록되는 @Repository 가 DAO 이다계층 간 데이터 교환을
Spring IoC(Inversion of Control) 컨테이너는 객체의 생성, 생명주기 관리, 의존성 주입 등을 관리하는 컨테이너이다. 스프링은 IoC 컨테이너를 제공하여 개발자가 객체를 직접 생성하여 관리하지 않고, 스프링이 객체의 생명주기와 의존성을 관리하도록
JPA의 영속성 컨텍스트에 대해 정리할 때가 온 것 같다. 확실히 이걸 알고나니 JPA의 동작 방식을 논리적으로 이해할 수 있게된 것 같다. 강의를 보지 않고 여러 블로그들을 참고하여 공부하였기 때문에 타 블로그의 내용이 많이 들어가게 되었다. 영속성 컨텍스트 영속성
스프링 시큐리티 6 프레임워크를 활용한 jwt 기반의 인증/인가를 구현하고 회원 정보 저장(영속성) MySQL 데이터베이스를 활용한다. 스프링 시큐리티 JWT글을 학습하고 자료들을 활용하여 나에게 맞춰 정리한 내용이다. 구현 목표 인증: 로그인 인가: jwt를 통한
클라이언트에서 로그인 정보를 서버로 전송한 다음, 서버로부터 발급된 토큰을 받아 로컬 스토리지에 저장하는 코드이다.리액트 + 스프링부트의 조합이다.클라이언트formData 형식으로 로그인 정보를 넘겨주었다. 이후 발급받은 토큰을 로컬 스토리지에 저장하고, 필요할때마다
Access-Control-Expose-Headers 라는 이름의 헤더는 서버가 보내는 응답에 포함된 헤더들 중, 클라이언트가 접근할 수 없는 헤더들에 대해 접근할 수 있도록 설정하는 헤더이다.클라이언트와 서버가 서로 다른 서버를 가진 경우, 기존에는 보안상의 문제로
스프링 시큐리티를 사용할 경우에, 스프링 시큐리티가 가장 앞단에서 사용자 요청을 처리하기 때문에 스프링 시큐리티에서 CORS 를 활성화시켜주어야 한다.예시
일반적으로 Controller 에서 아래와 같이 객체를 return 하는 경우, HTTP 응답을 제어할 수 없다. 아래 코드는 게시글 작성 코드이다. 클라이언트의 post 요청에 대해 board 객체로 응답할 경우 게시글은 정상적으로 db에 저장되지만 클라이언트가 기대
RestController를 사용하여 데이터를 반환하는 경우 기본적으로 해당 객체가 직렬화되어 HTTP 응답의 본문으로 전송된다. 그러므로 return boardRepo.findAll();과 같이 데이터를 반환하는 경우에는 해당 객체가 직렬화되어 JSON 또는 XML
자바에서는 예외 처리를 위해 try-catch 를 사용하지만, try-catch 를 모든 코드에 붙이는 것은 비효율적이다. 따라서 스프링은 에러 처리라는 공통 관심사를 메인 로직으로부터 분리하는 다양한 예외 처리 방식을 고안했다. 그리하여 예외 처리 전략을 추상화한 H