Back-end

·Back-end
@Transactional 에는 rollbackFor 옵션이 있다. 해당 옵션의 주석을 확인해 보았더니 By default, a transaction will be rolled back on RuntimeException and Error but not on checked exceptions (business exceptions). See org.springframework.transaction.interceptor.DefaultTransactionAttribute.rollbackOn(Throwable) for a detailed explanation. Transaction은 Unchecked Exception(RuntimeException 하위 클래스)과 Error에만 roll back을 수행하고, C..
·Back-end
1. 현재 작업 내용 임시 저장 git add . git stash 2. 임시 저장한 작업 내역 불러오기 git stash apply [stash 이름] 3. 작업 끝난 가장 최근 stash 한개 제거 git stash drop 4. stash를 잘못지워 복구하고 싶을 때 $ git stash drop Dropped refs/stash@{0} (5d5d2ea0733eb0b528571473973ff893b70956fb) 위 메세지의 오른쪽 괄호 값이 삭제된 stash의 해쉬 값이다. 해당 해쉬 값을 복사해 git stash apply 5d5d2ea0733eb0b528571473973ff893b70956fb
·Back-end
@Entity란? JPA를 사용해 테이블과 매핑할 클래스에 붙이는 어노테이션이다. @Entity가 붙은 클래스는 JPA가 관리하는 객체가 된다. 🧐 무분별한 어노테이션 사용 @Setter // 문제 1. 객체가 무분별하게 변경될 가능성 있음 @Getter @NoArgsConstructor // 문제 2. 기본 생성자의 접근 제어자가 불명확함 @AllArgsConstructor // 문제 3. 객체 내부의 인스턴스 멤버들을 모두 가지고 있는 생성자를 생성 @Builder // 문제 4. 모든 매개변수가 생성자 param으로 들어가 객체 생성 시 받지 않아야 할 매개변수도 빌더에 노출 @Data // 문제 5. 사용하지 않는 어노테이션을 따로 exclude 할 수 없기 때문에 개별 어노테이션 사용 @Enti..
·Back-end
- IDE: IntelliJ- jdk: openjdk 17 버전- spring boot: 3.0.0- Gradle 언어: Groovyjava.lang.NoClassDefFoundError:javax/persistence/Entityattempt to recreate a file for type qclasscould not find class file for querydslUnable to load class 'javax.persistence.Entity'.위 오류들 해결 🌲 멀티 모듈 X1. build.gradle에 Querydsl 의존성 추가dependencies { ... // querydsl implementation "com.querydsl:querydsl-jpa:5.0.0:ja..
·Back-end
멀티모듈로 구성되어 있는 프로젝트의 테스트코드를 실행해 보았더니 Caused by: java.lang.IllegalStateException: Failed to introspect Class [AccountService] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@251a69d7] Caused by: java.lang.NoClassDefFoundError: repository/AccountRepository Caused by: java.lang.ClassNotFoundException: repository.AccountRepository 이렇게 다른 모듈로 구분되어 있는 클래스파일을 읽어오지 못한다는 에러가 발생했다. 우선 내 b..
·Back-end
스프링에서 JPA를 사용 시 application.yml 파일의 spring.jpa.hibernate.ddl-auto: create 설정을 통해 하이버네이트가 자동으로 테이블을 만들어주지만 실 배포 단계에서는 하이버네이트가 자동 생성한 sql을 사용하는 것은 좋지 않다. 1️⃣ schema.sql 파일 schema.sql 파일을 만들면 하이버네이트에서 기본적으로 만드는 ddl을 사용하지 않고 데이터베이스 테이블을 만들 수 있다. 해당 파일을 resources 디렉토리에 만들어준다. drop table if exists post; create table post ( id bigint not null auto_increment, title varchar(255), content text not null, p..
·Back-end
1️⃣ keypair.pem 다운로드 EC2를 처음 생성할 때 받은 keypair를 잘 보관해 둔다. (딱 한 번만 다운로드 가능) 2️⃣ 경로 이동 후 keypair의 권한 변경 keypair가 있는 곳으로 경로 이동 $ cd ~keypair경로 내 경우 > cd /Users/컴퓨터이름/Downloads keypair의 권한 변경 $ chmod 600 keypair이름.pem keypair 이름이 abcd.pem 일 경우 > chmod 600 abcd.pem 을 터미널에 입력해 준다. 3️⃣ 터미널에서 접속 터미널에서 접속 $ ssh -i key-pair-이름.pem username@EC2퍼블릭IPv4DNS > ssh -i /key-pair-이름.pem username@EC2퍼블릭IPv4DNS 여기서 ..
·Back-end
@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf().disable(); return http.build(); } Spring Security 코드를 작성하면서 CSRF 공격에 대비를 하지 않고 이를 비활성화시켜도 되는지에 대한 의문이 들었다. 이에 대해 잘 모른 채로 보안 코드를 작성하는 것은 옳지 않다고 생각되어서 CSRF 보안 코드를 왜 비활성화시키는지 찾아 정리해 보았다. 1. CSRF(Cross-Site Request Forgery) 1.1 Cookie & Session CSRF를 알아보기 앞서 쿠키와 세션에 대한 간단한 이해가 필요하다. 사용자가 특정 서버에 로그인하면 일반적으로..
·Back-end
@Controller 🆚 @RestController @Controller 기존의 Spring MVC가 view을 사용하기 때문에 view(화면)를 return 데이터는 ModelAndView객체를 이용해 Controller에서 Client로 전달 @ResponseBody 어노테이션을 사용 시 View를 return하지 않고 Controller에서 직접 데이터 return 가능 @RestController 모든 메서드는 @ResponseBody 어노테이션 기본으로 작동 컨트롤러 클래스의 각 메서드마다 @ResponseBody을 추가할 필요 X View가 필요없는 REST 방식에서 주로 사용 ResponseEntity란 스프링에서 제공하는 ResponseEntity 타입은 개발자가 직접 결과 데이터와 HT..
서채리
'Back-end' 카테고리의 글 목록 (5 Page)