전체 글 43

[SWM/9주차] API 개발 ing...

최근근황 2주사이에 팀에 코로나 이슈가 왔다갔다. 이에 혼자 개발을 끄적이기 시작했는데 ... 테스트를 위해 임시로 개발한 유저(멤버) 기능 몇개를 제외하고, 우선 가장 처음으로 러닝어플의 기본인 측정 및 저장 기능을 개발했다. Spring에서 통용되는 MVC 구조에 맞게 Controller - Service - Repository 구조로 개발을 진행했다. 그저 아무렇게 내 맘대로 하는 개발이아닌 누군가와 협업하며 하는 제대로된 백엔드 개발은 처음이여서 그런지 애매한부분들이 생겼다. 가령 "어 근데 이거 서비스에 들어갈지 api단으로 빼버려야 할지 너무 애매한데.." 등과 같은 고민들 말이다. 이에 깃에 이슈를 파서 멘토님께 질문드릴 질문사항을 남기면 나중에 답변해주시기로 하셨다. 처음에는 이런거까지 ..

SW maestro 2022.08.14

[Spring/Java/Jackson] JSON List를 문자열(String)으로 변환

문제의 발단 API 개발 중 다음과 같은 JSON을 받아와 파싱하여, 그중 JSON List 인 runningData 전체를 문자열(String)으로 저장할 필요가 생겼다. 파싱과 관련된 자세한 내용을 보고싶다면 여기를 클릭하세요! { "userId" : long(아이디번호) , "runningId" :long(아이디번호) , "duration" : int(지속시간), "runningData" : [ { "latitude" : double(경도), "longitude" : double(위도), "altitude" : double(고도), "speed": double(속도), "timestamp" : DateTime(시간) },{ … } ] } 여기서는 Java가 json을 편리하게 다룰수 있도록 도와주는..

Programming/Spring 2022.07.31

[spring/java] JSON 안의 JSON 리스트 객체로 파싱받기

문제의 발단 API 개발 중 JSON 안에 JSON 배열(리스트)를 가진 형식의 JSON을 객체로 파싱하여 저장할 필요가 생겼다. 즉, 다음과 같은 형식의 JSON 테이터를 객체로 받아와야할 필요가 생긴것 { "userId" : long(아이디번호) , "runningId" :long(아이디번호) , "duration" : int(지속시간), "runningData" : [ { "latitude" : double(경도), "longitude" : double(위도), "altitude" : double(고도), "speed": double(속도), "timestamp" : DateTime(시간) },{ … } ] } 결론부터 말하면 본인은 위의 형식에 해당하는 데이터 객체를 만들어 해결했다. 소스 코드 ..

Programming/Spring 2022.07.31

[네트워크/Network] WebSocket이란? (feat. Pooling)

웹소켓 탄생 배경 웹소켓에 대해 이야기 해보기전, 우선 polling 방식에 대해 이야기를 해보자. 우리가 흔하게 아는 클라이언트와 서버의 통신방법이다 (RestAPI 방식) 클라이언트에서 매번 필요할때 마다 request 하고 서버에서 response 해주는 방식이다. 하지만 실시간 검색어나 채팅 서비스를 생각해보자. 매번 채팅이 도달할때마다, 또는 실시간 순위가 바뀔때마다 클라이언트에서 요청을 보내야한다(!) 이를 위해 주기적으로 호출해서 서버에 내 상태를 알려주어야 하는데 이는 굉장히 낭비가 심하게 된다. 굉장히 낭비가 심하다 이것이 바로 polling 방식이다. 기본적인 게시판같은 실시간 상태 공유가 필요없는 웹게시판에서 사용하게 된다. 이를 해결하기 위해 나온게 바로 웹소켓이다! 웹소켓이란? 웹..

[백준/골드5] 1759번 - 암호 만들기 (Java/자바)

1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 암호만들기 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 48181 22647 15700 44.602% 문제 바로 어제 최백준 조교가 방 열쇠를 주머니에 넣은 채 깜빡하고 서울로 가 버리는 황당한 상황에 직면한 조교들은, 702호에 새로운 보안 시스템을 설치하기로 하였다. 이 보안 시스템은 열쇠가 아닌 암호로 동작하게 되어 있는 시스템이다. 암호는 서로 다른 L개의 알파벳 소문자들로 구성되며 최소 한 개의 모음(a, e, i, o, u)과..

[M1 MAC] openJDK 버전 다운그레이드 시키기 (17에서 11로)

개발환경 셋팅을 위해 팀원들과 openJDK 11 버전을 쓰기로 합의봤다. (8은 너무 구버전이고, 17은 안정성이 떨어지기 때문) 하지만.. 맥북프로 셋팅 초기에 이미 Jdk 최신버전으로 설치해버린 것 아래처럼 openjdk 11을 다운받아 설치했지만 계속 18버전으로 유지되고 있었다. 이에 아래와 같은 방법으로 다른 버전을 설정시켜보게 되었다. 1.터미널을 열고 다음과 같은 명령어를 입력한다. > /usr/libexec/java_home -V 이미 18과 11 버전이 깔려있는 본인의 경우 다음과 같은 문구가 떴다 Matching Java Virtual Machines (2): 18.0.1.1 (arm64) "Oracle Corporation" - "OpenJDK 18.0.1.1" /Users/'사용자..

[SWM/5주차] 환경셋팅 및 스프링 공부(ing..)

환경 셋팅! 우리는 프로젝트개발을 flutter + spring + mariadb 로 진행할 것이다. 이에 개발을 위한 환경셋팅을 시작했다. 우선 github organization을 만들었고 팀원 모두 들어갔다! 그리고 본인의 경우 백엔드 담당이였기에 spring boot 스타터를 사용해서 간단한 개발 환경을 설정하였고, 프론트를 개발하는 친구가 api하나를 던져달라고 하였으나 우선 json형식의 무언가가 아닌 "helloworld" 라는 텍스트를 던져주었다. 그리고 프론트 친구가 시뮬레이터로 앱 화면에 단어까지 띄웠다! (아쉽지만 사진은 없다) 그리고 디비 연동도 필요하다고 생각되어 mariadb와 spring 연동 하고 간단한 테스트 코드까지 작성했다. https://coding-zzang.tist..

SW maestro 2022.07.10

[SWM/4주차] 기능명세서 및 기능별 API 작성

1. 기능 구체화 및 기능명세서 작성 기획단계가 끝나고, 본격적인 개발에 앞서 팀원들과 기능들에 대해 확실하게 정해둘 필요가 있다고 여겼고, 몇시간의 회의를 통해 기능을 구체화 시키게 되었다. 애매하거나 전문가나 멘토님의 도움과 조언을 거칠 필요가 있어보이는 기능들에 대해서는 대강 작성해놓았다. 이를 바탕으로 담당멘토님의 팀 멘토링 두번을 거쳐 구체적인 기능명세서를 작성했다. 우리는 기능별로 구현 우선순위를 정하고, 8월말까지 3번-4번까지 구현해보도록 하였다..지만 추후 기능 개발시 테스트의 편리함 등을 이유로 "로그인 기능은 가장 마지막에 구현하는것이 좋다"는 담당 멘토님의 의견으로, 로그인기능을 가장 나중으로 빼버리기로 했다. 2. 기능별 API을 생각해보자 기능을 구체화 하였다면, 기능별 유저케이..

SW maestro 2022.07.10

[Mac/Intellij] Spring + mariaDB 연동 프로젝트 만들기 & 환경셋팅

본 글은 마리아 디비가 설치되어 있다는 가정하에 시작합니다. brew가 설치되어있는 사용자는 아래의 명령어를 입력하고, 아닌 사람은 검색을 통해 설치해주세요 brew install mariadb 1. Spring 프로젝트 생성 본 게시글에서는 intellij의 spring initializr 플러그인을 활용할 것이다. 만약 없다면 아래의 사이트를 대신 이용하자. https://start.spring.io/ group, projct Name을 설정해주고, opnJDK 11를 선택후 Next를 눌러준다. 이후 Spring Boot DevTools, Lombok, Spring Web, Spring Data JPA, MariaDB Driver 이렇게 5가지의 dependency들을 추가해후 create를 눌러준..

Programming/Spring 2022.07.06

[SWM/3주차] 쉬어가는 주

불같던 기획심의가 끝나고 3일뒤 받은 메일 1차 기획심의에서 떨어졌을경우 바로 다음주까지 2차 기획심의를 진행했어야 했는데, 다행히도 우리는 한번에 붙었다 팀원들과 짧은 자축을 즐기고… 일단 열심히 쉬기로 했다 그사이에 우리조의 ‘고기를 담당(자칭)’하시는 멘토님께서 사주신 개비싼 소고기도 먹었다 다시봐도 고기 때깔이 곱네요^^ 팀원들의 도움을 받아 스벅 프리퀀시도 교환하고… 다음만남까지는 각자 공부할 파트를 나누고 공부해오기로 했다. 원래는 공부한내용을 브로그에 정리한걸 주간일기로 쓰려고 했는데,,, 공부가 생각보다 오래걸려서 패쓰^^~ 좀만 징징거려보자면 aws너무 어렵다… 지난학기 네트워크 수업을 휘갈겨 듣는게 아녔는데!! 개념공부 해가면서 실습강의를 듣다보니 따라가기 꽤나 벅차고 오래걸리더라 하여..

SW maestro 2022.07.05