분류 전체보기 94

[Java] REST API 간단 이해

REST RESTful REST API RESTful API 개발을 시작하고 많이 보고 들어본 단어들이다. REST가 공통된 위 단어들이 무엇을 뜻하는지 보겠다. REST (Representational State Transfer) CRUD(Create, Read, Update, Delete) 작업을 HTTP 프로토콜을 통해 API를 설계하기 위한 아키텍처 스타일이다 Stateless(무상태성)이 특징으로 각 요청은 서버에서 어떤 상태도 저장하지 않아야 함. 모든 정보는 각 요청 안에 포함되어야 한다 사용자가 로그인한 상태에서 API를 호출한다고 했을 때, 이 요청을 누가 요청했는지에 대한 정보 (토큰, 세션 정보)를 포함해야 함(요청을 처리하기 위한 모든 필요한 요소) RESTful REST 원칙을 따..

Java 2023.08.04

[Java] DTO DAO 한번에 이해하기

DTO(Data Transfer Object): 데이터를 전송하는 객체 DAO(Data Access Object): 데이터에대한 접근을 추상화하고 캡슐화하는 객체 클라이언트가 서버에 어떻게 요청하고 서버는 어떻게 처리하여 내보내는지 회원가입을 예로 이해해 보겠음. 1. 회원가입 화면에서 클라이언트는 아이디나 비밀번호를 유저에게 입력받고 입력받은 값을 서버로 보낸다(Json형식) 2. 데이터를 requestDto로 받는다 3. 회원가입 컨트롤러에서 위의 requestDto를 매개변수로 받아 서비스 로직으로 보낸다 4. 서비스 로직에서는 requestDto 내부의 값들이 실제 db에 있는지 확인 후 가입 진행 - 실제 db에 requestDto 값들이 있는지 확인하기 위해 dao가 필요.(jpa를 사용한다면..

Java 2023.07.30

[Java] 문자열 String, Buffer, Builder

Java를 공부하며 문자열은 String만 있는 줄 알았고 String만 사용했다. 하지만 종종 StringBuilder, StringBuffer가 보이는데 흔히 String은 불변이고 나머지는 가변이라고 한다. String 이란? 변경할 수 없으며(불변) 고정된 문자를 저장하는 데 사용 a는 "안녕" 이다. a는 "안녕하세요" 이다. -> String은 불변인데 a가 바뀐 것 아닌가? 먼저 눈에 보이는 문자열 a의 값은 바뀐게 맞다. 그러나 위에서 말하는 불변이란 주소값을 가리킨다. 즉, 처음의 참조변수 a는 "안녕" 이라는 값을 가리키는 주소값을 갖게된다. 그리고 새로운 두 번째 참조변수 a는 "안녕하세요"를 새롭게 가리키는 주소값을 갖게되며 기존의 a값인 "안녕"과 해당하는 주소값은 더이상 사용하지..

Java 2023.07.23

[Spring] EC2에 Prometheus & Grafana 적용

sudo systemctl status grafana-server - 그라파나 서버 상태 확인 sudo systemctl start grafana-server - 그라파나 시작 sudo systemctl stop grafana-server - 그라파나 종료 netstat -tulnp | grep 3000 - 현재 실행중인 3000포트 확인 sudo systemctl restart grafana-server - 그라파나 재시작 Gradle implementation 'io.micrometer:micrometer-registry-prometheus' 프로메테우스 다운 ec2 서버의 보안 설정에서 9090 포트를 열어주고 prometheus 다운 및 압축 해제 - https://prometheus.io/dow..

Spring 2023.07.18

Http, Https 프로토콜

1. keyStore 생성 터미널을 열고 아래의 코드 입력한다. 코드를 입력하면 비밀번호를 설정하고 순서에맞게 차례로 작성하면 된다.keytool -genkey -alias {생성할 키스토어 이름} -keyalg RSA -keystore {생성할 키스토어 파일이름}.jks 2. Key-Store에서 인증서 추출 아래의 코드 입력 이후 비밀번호 입력keytool -export -alias {생성된 키스토어 이름} -keystore {생성된 키스토어 파일이름(.jks까지 작성)} -rfc -file {생성할 인증서 파일이름}.cer 3. Trust-Store 생성 아래의 코드 입력 이후 비밀번호 입력keytool -import -alias {생성할 Store 이름} -file {생성된 인증서 파일명{.cer..

Spring 2023.07.11

[공모전] 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