지난 한주동안에는 중간발표 피드백으로 받은 내용을 적용해보는 시간으로 slow query 발생시 슬렉메세지 전송하는 코드를 작성했다. slackconfig 내용 @Slf4j @Configuration public class SlackConfig { @Value("#{environment['slack.key']}") public String slackKey; public final WebhookResponse send(String text) { try { WebhookResponse response = null; Slack slack = Slack.getInstance(); String webhookUrl = slackKey; System.out.println(); Payload payload = Payl..
지난 한주동안에는 중간발표를 위한 뷰 페이지를 보여주기위해 thymeleaf를 사용했고, redis를 적용해 로그인시 발급하는 refresh토큰을 mysql db에 저장하는 대신 인메모리 식으로 저장하게 바꿨다. jpql, querydsl을 사용한 검색 버튼을 구분하였다. 코드는 match against를 사용! @Query(value = "SELECT * FROM books WHERE MATCH(title) AGAINST(:word in boolean mode) LIMIT :size OFFSET :page", nativeQuery = true) List searchTitleFullText(@Param("word") String word, @Param("size") int size, @Param("pag..
이번주부터는 백엔드팀에서 대용량처리를 해보기위한 주제로 도서를 선정했다. 주제를 도서로 정한 이유는 데이터 수집이 용이하기 때문이였다. (물론 주제가 재미는 없어보이겠지만 대용량처리가 중요한거니까 라는 이유로) 주제를 선정을 하고 처음부터 도서관 정보나루에서 csv로 파일을 db에 넣는식으로 작업을 진행하다가 자바에서 POI 라이브러리를 이용해 null처리나 데이터 정제를 excel에서 진행해 데이터를 가져왔다. 그렇게 가져온 데이터의 개수는 약 1630만개가 모였다. 아무런 작업없이 검색시 약 28초가 걸린다. select * from books where title like "%소세지%"; fulltext 인덱스 ngram 파싱시 아래와같이 생성하였고. alter table books add FULL..
지난 한주동안에는 프론트분들과 메가박스 사이트 클론코딩을 시작했고, 개발한 기능으로는 spring security, 로그인, 회원가입, 기본 crud, 이미지업로드등 지난 기간동안 사용했던 기술들을 리마인드 하면서 더 나아가서 검색기능이나 n+1 현상을 개선하는 시간을 가졌다. @Query("select m from Movie m Join fetch m.heartList join fetch m.member") List findTop4ByOrderByTotalHeartCountDesc(); 위와 같이 join fetch를 사용하게되면 one to many로 값을 가져오는 과정에서 여러 쿼리가 더 나가게되는데 최소한의 쿼리 로그로 합쳐져서 깔끔하게 나가는걸 확인할 수 있었다. 그리고 영화를 등록하고 삭제하는..
지난 한주동안에는 프론트분들과 함께 공동작업을 하는 시간이였다. 어떤 프로젝트를 할지 정하였고 그에 따라 API를 작성하고 프론트분들은 와이어프레임을 작성했고 이어서 같은 조에 팀원분들과 역할을 나누어 백엔드 작업을 시작했다. 그렇게 작업을 하던중에 중간점검겸 프론트와의 첫 통신을 위해 EC2 서버와 RDS를 프리티어로 만들어서 서버를 올렸다. 이점에서 CROS에러를 해결하기위한 클래스를 작성해주었다. @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOr..
지난 한주동안에는 스프링 배우시는분들과 함께 기본 crud api를 작성해서 각자 맡은 파트를 수행해서 깃허브로 협업해보는 한주였다. 나는 게시물 작성하는 부분을 맡았다. 컨트롤러 부분. @RestController @RequiredArgsConstructor @RequestMapping({"/article"}) public class ArticleController { private final ArticleService articleService; @GetMapping public ResponseDto selectAll() { return articleService.findAllArticle(); } @PostMapping public ResponseDto article(@RequestBody Arti..
지난 한주동안에는 Spring security를 사용한 기본 CRUD API를 작성해 그 API형식데로 view에서 요청시 Controller - Service - Repository의 순으로 정보를 담아서 로직처리 후 db에 커밋하는 순으로 돌아가게된다. 여기서 Spring security는 Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. Spring Security는 '인증'과 '권한'에 대한 부분을 Filter 흐름에 따라 처리하고 있다. Filter는 Dispatcher Servlet으로 가기 전에 적용되므로 가장 먼저 URL 요청을 받지만, Interceptor는 Dispatcher와 Controller사이에 위치한다는 점에서 적용 시기의 ..
지난 한 주 동안에는 JpaRepository 상속한 Repository를 만들어서 기본적인 crud기능을 구현해보았다. 클라이언트의 요청을 받고 전달해주는 구성으로 아래와 같이 구성했었다. Member라는 클래스가 있고 그 멤버 클래스에 정보를 받을 수 있는 컨트롤러가 클라이언트가 전송한 데이터를 받아 서비스로 전달해 그 서비스는 내부에서의 처리과정을 거친 뒤 레파지토리를 통해 그 정보를 DB에 저장해주는 방식이였다.(조회, 업데이트, 삭제 또한 동일한 흐름) 이 과정에서 기존에는 Meber를 저장하는 방식이 받아온 값을 그대로 db에 전달해주는 식이였다면 DTO를 통해 값을 전달받아서 Entity 즉 Member의 정보가 날것?으로 들어가는 게 아닌 한번 감싸서 받아 온 뒤 저장하는 형식이였다. 이렇..
- Total
- Today
- Yesterday
- JPA
- 환경세팅
- DTO
- 코드해석
- badrequest
- python
- joinfetch
- 협업
- wil
- method
- EC2
- backoffice
- ssl
- IOC
- 알고리즘
- .jks
- EntitiyManagerFactory
- DI
- POI
- JWT토큰
- 항해99
- this
- JPQL
- Spring
- 김영한
- instance
- querydsl
- 풀텍스트
- java
- ajax
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |