본문 바로가기

분류 전체보기

(57)
JPA Ch 3 Query Method 소팅 / 페이징 - 패스트캠퍼스 챌린지 22일차 쿼리 메소드의 남은 강의 두 개입니다. 정렬과 페이징이 되시겠습니다. 이번에도 메서드의 이름 규칙을 좀 더 배우지만, 추가로 패러미러를 넣는 방법도 배웁니다. OrderBy(프로퍼티_이름)(Desc|Asc) 쿼리 메소드에서 정렬을 하려면 정렬 기준 프로퍼티를 포함하여 OrderBy 를 넣습니다. 잊지 마세요, 정렬 기준 프로퍼티를 꼭 넣어야 합니다. 정렬 순서 표시는 끝에 Desc 혹은 Asc 를 붙이면 되는데, 흔하죠? (내림차순, 오름차순의 약어) 쿼리는 order by 구문이 들어갑니다. // First 대신 Top fun findTop1ByNameOrderByIdDesc(name: String): User? // order by desc // 1 생략 가능 fun findTopByNameOrder..
JPA Ch 3 Query Method (2~3) - 패스트캠퍼스 챌린지 21일차 어제에 이어서 기본실습 2 (1, 2) 입니다. 추가적으로 메소드를 뭘 더 만들수 있는지 보는 것 외에는 따로 유의미한 걸 진행하지는 않았습니다. 쿼리 메소드라는게 뭘 쓸 수 있을지 알아야지 쓸 수 있는거니까 그게 중요하긴 하겠죠??? And / Or List findByEmailAndName(String email, String name) 직관적입니다. And 와 Or 로 데이터의 여러 필드를 조건으로 걸어서 검색할 수 있습니다. 쿼리의 where 절에 해당 조건이 들어갑니다. 딱 하나 궁금했던 부분은 And와 Or 을 여러번 쓰면 어떻게 되나였는데, 쿼리에 그대로 나오더군요... fun findByNameAndIdOrEmail(name: String, id: Long, email: String): U..
JPA Ch 3 Query Method (1) - 패스트캠퍼스 챌린지 20일차 오늘은 의욕이 별로 안 나는 날이라 강의는 하나만 나가기로 했습니다. 그런데 웬걸 결국 더 찾아보게 되던... 다만 더 찾아본 거에 비하면 큰 소득은 없었습니다. Query Method interface 로 정의했던 MyRepository 에 신기하게도 특정 규칙에 맞춰서 메소드를 정의하기만 하면, 신기하게도 (짜잔!) 함수 본문이 없는데도 메소드의 이름 대로 동작합니다. 이게 Query Method 입니다. 강사님 말씀하시길, 적은 노력으로도 손쉽게 짤 수 있다고 (가성비가 좋다는 얘기죠). 규칙은 레퍼런스 문서를 참조하시면 되구요. 여기에서 사용 가능한 패턴이나 반환형 등을 살펴보실 수 있습니다. https://docs.spring.io/spring-data/jpa/docs/current/refere..
JPA Ch 2 SprDatJPA 기초 (2) - 패스트캠퍼스 챌린지 19일차 어제에 이어서 실습을 마저 해보고, 하는 김에 소스도 좀 같이 파봅니다. 요점 성능차이가 있는 API들을 조심하라: deleteAllById 와 deleteAll( 엔티티 목록 ) 등 QueryExampleMatcher 는 추가된지도 얼마 안 됐지만 잘 사용되지 않으니 어떻게 쓰는지만 알아보고 넘어가기 보통 나중에 배울 Query DSL 을 쓴다 (이런 게 있으면서 나중에 가르쳐준다구요?) Spring Data JPA에 편리한 페이징 객체가 있다 소스를 좀 파보면 배우는 게 많다 ("요즘 트렌드가 깔끔한 코드이기도 하고") save 함수는 ID 조회로 update를 할지 create를 할지 결정한다 (소스 파봄) 오늘은 샘플 위주여서 스크롤이 좀 깁니다. 스크롤만 기니까... save 후 flush vs..
JPA Ch 2 SprDatJPA 기초 - 패스트캠퍼스 챌린지 18일차 기초 맛보기 가즈아 글 한 번 날려먹음. 나 좀 지금 당황스러운게 자동저장도 없고 글은 과거버전이네요... 뭐 어쩌겠어요 복구해야죠... 현실부정이다 현실부정이야 글 돌아와 ㅠㅠ 그래서 글이 좀 담백할거니 이해 부탁드립니다. 쉬익 쉬익 왜 날아갔는지 알았어 이미지랑 아래 필수내용 박스를 같이 복붙해서 이미지가 없는 거 취급받아서 뭔가 버그를 자극한거야 Spring Data JPA 를 처음 실제로 사용해보는 만큼, Entity 와 Repository 를 만들고 여러 API로 조회해보는 거까지 진행합니다. 생각보다 강의가 깁니다. 실습이 두 파트인데 결국 다 진행 못 하고 중간까지만 진행함 Entity / Repository 만들기 엔티티와 리포지터리를 만들어봅니다. Entity 클래스에 @Entity p...
JPA Ch 1 인트로 - 패스트캠퍼스 챌린지 17일차 La lekcio de hodiau estas pri la JPA, kiu estas necese por programado per la spring programframo. (파파고에 돌리지 마세요. 파파고는 지 이름이 에스페란토이면서도 에스페란토는 번역 못 해요.) 이전에 보던 Spring 실습 섹션은 아무래도 뒤에 나올 내용이 뻔해보여서 스킵했습니다. 실질적으로 돌아가는 앱을 만드려면 데이터베이스는 필수이니까, 차라리 강의를 마저 보기 위해 시간을 보내는 것보다는 JPA를 하루라도 빨리 (마음 너무 급해...) 배우는 게 낫겠다고 생각했거든요. 인트로만 진행하는 것도 꽤나 시간이 들어가서 이번에는 앞으로 강의를 진행하면서 사용할 샘플 프로젝트만 만들어볼 예정입니다. 실제로 강의에서도 그것만 진행했구..
스프링 Ch 10 맛집 - memory DB - 패스트캠퍼스 챌린지 16일차 실습의 날입니다. 이번엔 실습에 시간을 좀 투자해야 해서 일부러 진도를 많이 안 나가고, 매우 단순할거라 예상했던 Memory CRUD DB 만을 실습해봤습니다. 가능하다면 JPA (Java Persistence API, 자바답게 이런 거 하나하나 다 표준임) 을 써보고싶었는데, 아무래도 10분내에 날름 해치우고 쓰기에는 무리가 있었습니다. C# 계열의 "EF Core" 라는 ORM 을 배워본 적이 있어서 쉬울 줄 알았는데 자바답게 표준때문에 좀 더 깊게 배워야 쓸 수 있을 거 같이 생겼더라구요. 당연히 Hibernate랑 SQLite 를 썼겠지만... (*참고: 여기있는 코드들은 강의와는 좀 다릅니다. 강의를 한 번 쭉 본 뒤, 가급적이면 안 보고 직접 짜보는 방법을 썼거든요.) MemoryRepo 별..
스프링 Ch 9 Swagger/OpenAPI - 패스트캠퍼스 챌린지 15일차 앗싸 오늘거 실습 필요 없다 실습당했다 Swagger 입니다. 지금은 OpenAPI 랑 반반무마니 해서 갈라지긴 했는데 아무튼 API를 예쁘게 표준에 맞춰서 json 형식으로 문서화해주고, 클라이언트까지 알아서 만들어주는 편리한 친구입니다. 그런데 강의에서 제가 몰랐던 새로운 활용법을 알려주더라구요? 바로 /swagger-ui 페이지에서 마치 Postman 같은 거에서 실행해보듯이 바로 테스트를 해볼 수 있다는 것이었습니다. 이건 살짝 충격~ 사용하는 라이브러리 https://github.com/springfox/springfox springfox 프로젝트를 사용합니다. 기존 라이브러리(라는 게 있는지도 몰랐지만)들은 어노테이션을 수동으로 달아야 했지만, springfox 프로젝트를 사용하면 알아서 자동..
스프링 Ch 8-2~3 Spring 테스트 - 패스트캠퍼스 챌린지 14일차 오늘 볼 강의는 WebMVC 쪽의 테스트 작성이네요. 궁금했던 부분이니만큼 실습을 하면서 강의에서 자세히 설명해주지 않은 부분들을 이해해봐야겠습니다. 특히 이번건 스리슬쩍 넘어간 거 같은 부분도 있구요. @Mock, @MockBean 먼저 이해해야할 건 이 두 가지 어노테이션이 무엇을 의미하느냐입니다. short answer: mock 객체 생성을 대신 해줍니다. 일반적으로 모킹 프레임워크는 mock 객체를 만드는 함수를 제공해주죠? 필드를 초기화하는 것조차 귀찮았는지, 아니면 다른 이유가 있는건지 @Mock / @MockBean 을 필드에 넣어서 이를 대신합니다. @Mock: org.mockito.Mock: 필드를 mock 객체로 만듭니다. @MockBean: 스프링 건데, 위에 더해서 DI 컨테이너에..
스프링 Ch 7-3 네이버 검색 연동 / JUnit - 패스트캠퍼스 챌린지 13일차 이번 강의는... 정말 별게 없습니다. 단지 네이버 지역 검색 API로 앱을 등록해서 httpClient 로서 호출해보는 내용 뿐입니다. 이전 강의와 마찬가지로 역시 트러블슈팅이 어느정도의 부분을 차지하고 있으며, 쿼리 패러미터의 인코딩에 대부분의 시간을 소요합니다. 별도의 인코딩이 필요없고, URIComponentsBuilder 의 encoding() 만 잘 설정해주면 됩니다. 부스터샷을 맞은 다음날이라 약간 열기운이 있을랑말랑 해서 오늘은 쉬어가는걸로 실습을 간단하게 구경만 해보기로 하려고 했는데, JUnit 단원에서 뭘 하는지 궁금해서 미리 좀 봐두기로 했습니다. 다만 오늘 제대로 공부하는 건 무리고, 그냥 영상만 훑어보려구요. 이미 JUnit 4를 써보기도 했구요. JUnit JUnit 이란 - ..