전체 글 161

[시큐리티] 초기 세팅

1. 프로젝트 생성 자바 11, 스프링 부트 2.x spring dev tools, spring data jpa, spring security, lombok, mustache, mysql driver, spring web 2. application.properties ## server server.address=localhost server.port=8080 server.servlet.context-path=/ //연결될 url 설정 // 인코딩 설정 server.servlet.encoding.charset=UTF-8 server.servlet.encoding.enabled=true server.servlet.encoding.force=true ## my sql spring.datasource.url=j..

Spring/security 2023.03.09

[자바 개념] Optional<T>

1. 개념 T타입의 객체를 감싸는 래퍼 클래스 2. 특징 최종 연산의 결과를 그냥 반환하는 게 아니라 Optional 객체에 담아서 반환을 하면 반환된 결과가 null인지 매번 if문으로 체크하는 대신 Optional에 정의된 메서드를 통해서 간단히 처리 가능 널 체크를 위한 if문 없이도 NullPointerException이 발생하지 않는 보다 간결하고 안전한 코드를 작성하는 것이 가능 3. Optional 객체 생성하기 1) of 값이 null이면 NullPointerException을 발생시킴 들어갈 값이 null 아닌 것이 확실할 때 사용 2) ofNullable 값이 null이어도 NullPointerException을 발생시키지 않음 들어갈 값이 null인 것이 확실하지 않을 때 사용 3) ..

자바 2023.03.08

[테스트 코드] 테스트 코드 작성 문법

https://www.baeldung.com/introduction-to-assertj 1. Assertions.assertThat(something) 1) 개념 something에 객체, 컬렉션, 스트링 등을 담아 놓고 뒤에 체인 방법으로 다른 메서드를 달아 그 메서드에 맞는지 아닌지를 검증 할 수 있게 해 준다. 2) 방법 Assertions.assertThat("abc").isLowerCase() //소문자인지 확인후 소문자가 맞으면 테스트 성공, 아니면 테스트 실패 2. assertThat(객체) 1) isEqualTo 객체의 값이 같은지 비교

Spring/test 2023.03.08

[테스트 코드] 테스트 코드 관련 어노테이션

1. @SpringBootTest 1) 개념 통합 테스트를 위한 환경을 준비해준다. 모든 빈들을 스캔하고 애플리케이션 컨텍스트를 생성하여 테스트를 실행. 2. @Transactional 1) 개념 각각의 테스트를 실행할 때마다 트랜잭션을 시작하고 테스트가 끝나면 트랜잭션을 강제로 롤백한다. 따라서 테스트를 진행하면서 데이터베이스에 저장한 데이터가 테스트가 끝나면 롤백되므로 반복해서 테스트를 진행할 수 있다. 3. @Autowired 1) 개념 의존 관계를 자동으로 주입해준다 4. @Test 1) 개념 테스트를 수행하는 메소드를 의미. 각각의 테스트가 서로 영향을 주지 않고 독립적으로 실행됨을 원칙으로 @Test마다 객체를 생성. 5. @WebMvcTest 1) 개념 스프링은 특정 부분만 테스트할 수 있는..

Spring/test 2023.03.08

[테스트 코드] 테스트 코드의 개념과 필요한 이유

1. TDD와 단위테스트 1) TDD 개념 테스트가 주도하는 개발 방법 테스트 코드를 먼저 작성 테스트가 통과하는 프로덕션 코드를 작성 테스트가 통과하면 프로덕션 코드를 리팩토링 2) 단위테스트 개념 기능 단위의 테스트 코드를 작성하는 것 특징 테스트 코드를 꼭 먼저 작성해야 하는 것은 아님 리팩토링이 포함되지 않음 2. 테스트 코드 1) 장점 빠른 피드백이 가능 테스트 코드가 없으면 코드 수정이 발생한 경우 톰캣을 껐다가 켜는 행위를 반복해야 해서 비효율 자동 검증 가능 포스트맨이나 System.out.println()을 사용해서 수동 검증을 하지 않아도 돼서 편리 개발자가 만든 기능을 안전하게 보호 A라는 기능이 있고 B라는 기능을 추가했을 때 테스트코드가 있으면 A기능이 여전히 되는지 편리하게 확인..

Spring/test 2023.03.08

[JPA] 리포지토리 관련 어노테이션

1. @Query 1) 개념 리포지토리 메소드에 직접 쿼리를 정의하고 싶을 때 사용 2) 속성 nativeQuery 네이티브 sql을 사용하고 싶을 때 해당 속성을 true로 설정 2. @Param 1) 개념 sql을 직접 작성한 후 파라미터를 바인딩 할 때 사용 3. @Modifying 1) 개념 모든 데이터에 일괄적인 업데이트를 날려야 하는 경우 벌크성 수정 쿼리를 사용하는데 그때 사용 2) 속성 clearAutomatically 4. @Repository 1) 개념 JPA예외를 스프링이 추상화한 예외로 변환 5. @Transactional 1) 개념 서비스 계층에서 트랜잭션을 시작하지 않으면 리포지토리에서 트랜잭션을 시작하도록 함. 스프링 데이터 jpa가 제공하는 공통 인터페이스를 사용하면 데이터를..

Spring/jpa 2023.03.07

[ICT 인턴십] 회고록 5 - 세 번째 프로젝트

세 번째 프로젝트이자 마지막 프로젝트는 스프링과 vue를 사용하는 내부 프로젝트였다. 1. 프로젝트 시작하기 전 나의 마음가짐 스프링을 사용하는 프로젝트를 꼭 해보고 싶었는데 드디어 하게 되어서 기뻤다. 스프링을 어떻게 사용하는지 많이 배워야 겠다는 다짐을 가지고 프로젝트에 임했었다. 하지만, vue로 프론트엔드도 해야했기에 걱정이 되는 것도 있었다. 자바스크립트를 거의 써 보지 않았었고, 웹 프론트를 예전에 해봤지만 나와는 너무 안 맞는다는 생각을 가졌었기 때문... 2. 프로젝트를 진행하며 배운 지식적 내용 1) 테이블 설계 데이터베이스 과목을 막 듣고 있을 때는 테이블 설계가 엄청 어렵게 느껴졌다. 그냥 테이블 하나를 다루는 거는 괜찮았는데, 외래키를 가지고 막 연관을 지어야 하는 경우에는 머릿속에..

기록 2023.02.26

[JPA] JPA를 사용하는 다양한 방법

1. 순수 자바 환경에서 JPA 사용 엔티티 매니저 팩토리 생성 엔티티 매니저 생성 엔티티 매니저에서 트랜잭션 얻기 트랜잭션 실행 트랜잭션 안에서 로직 실행 트랜잭션 커밋 엔티티 매니저 종료 엔티티 매니저 팩토리 종료 2. 스프링이나 J2EE 컨테이너에서 JPA 사용 1) 사용법 컨테이너가 엔티티 매니저를 관리하고 제공해준다 엔티티 매니저 팩토리에서 엔티티 매니저를 직접 생성해서 사용하는 것이 아니라 컨테이너가 제공하는 엔티티 매니저를 사용해야 한다 @Repository public class MemberRepository{ @PersistenceContext // EntityManager em; public void save(Member member){ em.persist(member); } } 2) ..

Spring/jpa 2023.02.23

[스프링] controller 관련 어노테이션

1. @RestController 1) 개념 컨트롤러에서 뷰 대신 데이터를 반환하려면 @ResponseBody 어노테이션을 사용해서 json형태로 데이터를 반환할 수 있는데 @ResponseBody와 @Controller를 합쳐놓은 어노테이션 2. @RequestMapping 1) 개념 http request로 들어오는 url을 특정 controller 클래스나 메소드로 연결시키는 역할을 한다. 2) 속성 path url 지정 3. @PostMapping 1) 개념 POST 요청을 받아들여서 데이터를 작성 2) 속성 path url 지정 4. @RequestBody 1) 개념 http요청의 본문(body-json형태)이 객체로 변환되어서 매핑된 메소드 파라미터로 전달된다.

Spring/spring 2023.02.22