공모전 8

[공모전] AxiosError request failed with status code 500

전체 조회하는 Get방식과 조회할 수 있도록 등록하는 Post방식 두 가지를 구현하던 중 axioserror request failed with status code 500 오류가 나를 힘들게했던 오류이자 시간이 오래걸린 오류라고 생각한다. 먼저 securityconfig에서 http options, post 등의 설정을 해보았다. 그럼에도 프론트에서 넘어오는 값들이 모두 null이였고, 500이라는 에러 코드에 서버의 문제인가? 라는 생각으로 컨트롤러, 서비스, jwt, 필터, securityconfig 등 여러 클래스를 살펴보며 로그를 하나하나 찍어봤다. 프론트로부터 넘어오는 값중 헤더의 토큰 또한 null이었기에 filter에서도 걸릴 수 밖에 없었고 다른 로그는 나오지 않았다 이 상황이 너무나 어..

공모전 2023.07.08

[공모전] EC2 인스턴스와 Redis

사용 방법 메인페이지(전체 데이터 조회)에서 open api 많은 데이터를 가져와야했다. 나는 웹 서버용 ec2 인스턴스와 redis 서버용 인스턴스를 따로 만들어 포트를 연동시켜줬다. 서로 다른 인스턴스를 생성한 이유는 아래와 같다. 같은 인스턴스에서 작업시 둘중 하나가 메모리를 많이 사용했을 때 다른 하나는 다운될 수 있다. 인스턴스가 죽었을 때 다른 하나의 데이터라도 살릴 수 있다. 만약 인스턴스 실행시 redis실행을 자동화 하고싶다면 인스턴스를 생성할 때 고급 세부정보 아래칸의 사용자 데이터에 레디스 설치와 실행등을 수행하는 파일 경로를 지정해주면 된다. 내가 작성한 redis_setup.sh 파일 내용은 아래와 같다. 파일을 작성했다면 chmod +x redis_setup.sh로 실행 권한을 ..

공모전 2023.07.02

[공모전] 메인페이지 전체조회 속도 개선

open api를 사용하여 약 6200개의 데이터를 불러온다. 가져온 데이터를 사용자가 볼 수 있도록 프론트에 넘겨주는 과정에서 1분을 넘기거나 더 걸리기도 했다. 이 말은 웹 페이지에 들어갔을 때 전체 데이터가 보여지는데 걸리는 시간이 1분을 넘긴다는 소리였고 말도 안되는 부분으로, 1분이 넘게 걸렸던 이유는 약 6200개의 데이터를 1번부터 6200번까지 순차적으로 불러오는 로직이 문제였다. 1번부터 6200번까지 순차적인 실행이 아닌 동시에 실행하는 멀티스레드로 1차 개선하였고 실제로 속도 또한 크게 바뀌었다. 하지만 여전히 개선이 필요했고 다음으로 생각한 방법은 전체 데이터에대한 페이징 처리였다. 페이징처리의 간단한 설명으로는 한 페이지에 내가 설정한 데이터 갯수만큼 담아 요청에 보내는 것이고, ..

공모전 2023.06.27

[공모전] MySQL db와 연동했지만 h2가 연결되었던 문제

인텔리제이에서 mysql과 연동을 끝내고 기능이 잘 작동하는지 데이터가 삽입되는지 확인하고있었다. 코드 사이사이에 로그를 찍어보며 로직은 맞는것을 확인했으나 db에 저장되지 않았기에 추가적인 확인이 필요했다. 로직 자체에 문제는 없다고 판단해 먼저 aws의 rds를 확인해보고 새롭게 만들어 또 다시 테스트를 해봤지만 동일한 문제는 계속 발생했다. 코드와 rds 둘 다 문제가 없다면 연동에 문제가 있지 않을까? 라는 생각에 yml파일도 다시 확인하며 찾아보았지만 아래의 yml파일 또한 문제는 없었다. spring: jpa: show-sql: true database: MYSQL hibernate: ddl-auto: update database-platform: org.hibernate.dialect.MyS..

공모전 2023.06.22

[공모전] xml파일 변환

https://www.kopis.or.kr/por/cs/openapi/openApiList.do?menuId=MNU_00074&tabId=tab1_1 아래의 코드는 open api 데이터를 xml 형식으로 받아오는 코드이고 더 간단한 구조로 바꿔 사용을 계획했다. // todo 현재 고정 ip로 값 불러옴 -> 반복문 등을 통해 id 돌려야할 듯 public String detailPerformanceToXml() { StringBuilder response = new StringBuilder(); try { // Create URL object with the API endpoint // 여러가지 보려면 PF134308의 mt20 id 반복문으로 돌려야 할듯 ? URL url = new URL("htt..

공모전 2023.06.18

[공모전] 애자일/폭포수

명세 작성을 끝내고 기능 구현을 시작했다. 큰 틀은 잡아뒀지만 많은 수정이 필요할 것이라 판단하여 애자일 방법을 선택했다. 애자일이란? Agile은 개발에 대한 반복적이고 유연한 접근 방식이다. 협업에 많이 쓰이며 애자일 방법론에서 프로젝트는 스프린트라고 하는 작은 단위로 나뉘게된다. 스프린트는 예를 들어, 자동차를 만든다고 가정했을 때 한번에 자동차를 만들어 내놓는게 아닌 외발자전거 -> 두발자전거 -> 오토바이 -> 자동차 등의 방식으로 진행하는 것을 말한다. 기능을 갖춘 작동하는 소프트웨어를 제공하는 데 중점을 두는 것이고 단계별로 업무를 진행했을 때 지속적인 피드백과 팀워크, 그리고 변화하는 요구 사항에 대응하는 능력을 기를 수 있다고 생각한다. 폭포수란? Waterfall은 개발에 대한 순차적인..

공모전 2023.06.17

[공모전] Swagger

이전까지 api 명세서를 노션으로 표를 만들어 작성하며 수정 사항이 있다면 지속적으로 최신화를 시켜주곤 했다. 직접 표 안에 작성하기 때문에 새로운 툴을 사용할 때의 어려움은 없지만 불편한 부분이 있었다. 바로 수정할 사항이 있을 때 최신화를 지속적으로 시켜줘야 한다는 것인데, 급하게 코드를 수정하거나 할 때 최신화를 잊어버릴 수 있다는 문제였고 노션에 들어와서 계속 바꾸는게 시간도 오래 걸렸다. 그래서 intelliJ와 api가 연동되는 Swagger를 사용하기로 결정했고 계속해서 노션에 들어가 수동으로 바꿔줄 필요가 사라져 상당히 편리한 부분이었다. 나는 gradle 환경을 사용했기에 gradle 파일에 아래와 같은 코드를 추가했다. // swagger implementation 'org.spring..

공모전 2023.06.16

[공모전] 회의 및 설계

https://www.culture.go.kr/data/contest/main.do 오늘부터 문화체육관광부에서 주최하는 공모전에 참여하게 되었다. 프론트 1명, 백앤드 1명, 백앤드겸 데이터엔지니어 1명, 디자인 및 기획 담당 1명 총 4명이서 프로젝트를 진행하게 되었고 9시에 첫 회의를 했다. 협업을 시작하기 전에 먼저 코딩이나 깃헙 등의 컨벤션을 정하고 그 이후에 조금 더 기능적으로 어떤 것을 할지에대해 의견을 나눴던 것 같다. 저번에 프로젝트를 했을 때는 api 명세를 프론트도 같이 봐주곤 했는데 이번 프로젝트에서는 혼자나 백앤드끼리 작성하는 방향이 될 것 같았다. 어려운 부분은 있겠지만 이번 경험을 통해 Rest API에대해 조금 더 깊이 생각해볼 수 있을 것 같아서 좋은 기회라고 생각하기도 한다..

공모전 2023.06.15