spring
-
[Spring Batch] Batch 활용 목적과 Performance 개선 방법
아래 글은 카카오 테크의 강의를 학습한 후 개인적으로 정리한 내용임을 밝힙니다. (자료 출처) 1. Batch 활용하기 1-1. 일괄 처리 Batch Application? 원하는 시간에 스케줄을 걸어 대량의 데이터를 일괄적으로 처리할 때 사용한다. Realtime 서비스에 비해 개발 부담이 적은 경우가 많다. 1-2. Batch 활용 케이스 ① 일괄 생성 READ → CREATE → WRITE 기존의 정보를 조합하여 새로운 정보를 만드는 경우 ② 일괄 수정 READ → UPDATE → WRITE 이미 저장된 데이터를 일괄적으로 수정하는 경우 ③ 통계 SUM READ → CREATE → WRITE 이미 저장된 데이터를 통계적 형식으로 집계하는 경우 2. Batch Performance 개선 2-1. 대량..
2024.01.24
-
[Spring - OAuth2.0] 확장성 갖춘 소셜 로그인 구현
Google, Kakao, Naver 등 다양한 환경에 확장성을 갖춘 형태로 소셜 로그인을 구현해보자. 일단 Kako, Naver 두 환경을 대상으로 하며, 각 Developers 홈페이지에서 Application을 생성한 상태임을 가정하고 진행할 것이다. 참고 사항 카카오 로그인의 경우 '개인정보 동의항목 심사 신청'이 완료되기 전까지는 닉네임, 카카오계정(이메일) 등의 데이터만 불러올 수 있다. 본 글에서는 일단 닉네임과 이메일을 불러오는 것으로 진행하겠다. 네이버 로그인의 경우 서비스 상태가 '개발중'인 경우, 테스터 ID 등록 후 해당 계정에 한해서만 소셜 로그인을 적용해볼 수 있다. Naver Developers/내 애플리케이션/멤버관리에서 테스터 ID를 등록하고 진행하자. build.gradl..
2024.01.18
-
[Spring Boot - Zoom] 회의실 자동 생성 #2. REST API
이번 글에서는 발급한 access token을 바탕으로 Zoom Meeting API를 이용해 회의실을 생성해볼 것이다. access token 발급 과정은 지난 게시글을 참고하면 된다. 목차 1. Zoom App 생성 2. OAuth 2.0 설정 3. Zoom Meeting API 3-1. 전체 Flow 이해하기 우선 공식 문서를 따라 Create Meeting API 플로우를 이해해보자. 3-1-1. Endpoint Endpoint에 필요한 path parameter 'userId는 me value라는 명칭으로 소개되고 있는데, 이는 user ID나 이메일 주소 값을 사용한다고 한다. 우리는 이메일 주소를 이용할 것이다. 3-1-2. Request Body Zoom Meeting API는 다양한 요소..
2024.01.03
-
[Spring Boot - Zoom] 회의실 자동 생성 #1. OAuth2.0
Spring Boot 서버에서 Zoom 회의실을 자동 생성해보자. 이번 글은 Zoom REST API를 사용하기 위한 App 생성, OAuth2.0 설정 파트를 소개할 것이다. 목차 1. Zoom App 생성 2. OAuth 2.0 설정 3. Zoom Meeting API (다음 글에서 계속) Environment Java 17 Spring Boot 3.1.4 1. Zoom App 생성 1-1. Zoom App Marketplace 접속 및 로그인 https://marketplace.zoom.us/ App Marketplace marketplace.zoom.us 1-2. Develop / Build App Server-to-Server OAuth app을 생성해준다. https://developers.z..
2024.01.03
-
[Spring Boot - Firebase] 연동하기
준비물 : Firebase 프로젝트 기존 Firestore Database에서 스프링 서버로 데이터를 불러오기 위해 연동하는 과정을 진행해 볼 것이다. Firebase 프로젝트는 이미 생성했다고 가정하고 진행하겠다. 1. Firebase 비공개 키 다운로드 Firebase 프로젝트 대시보드의 프로젝트 개요 / 프로젝트 설정 / 서비스 계정으로 이동한다. SDK 언어를 Java로 설정한 후, 새 비공개 키 생성을 클릭한다. 스프링 프로젝트의 src / main / resources에 다운받아진 json 비공개 키를 복붙한다. 파일명은 각자 지정하면 되는데, 나는 firebaseServiceAccountKey.json으로 저장했다. 2. FirebaseConfig 설정 스프링부트 프로젝트에 FirebaseC..
2023.10.28
-
[Spring Boot] 주기적 코드 실행
서베이지에서는 활성 패널의 수에 따라 수집 가능한 최대 응답수가 달라지게 된다. 이에 따라 서베이지는 10일 단위로 활성 패널의 현황을 자동 업데이트하는 기능을 도입하기로 결정했다. 오늘은 Spring Boot의 @Scheduled을 이용하여 10일마다 실행되는 scheduled task를 만들어 볼 것이다. 1. @EnableScheduling 스프링의 scheduled task 실행을 가능하게 하는 어노테이션이며, 메인 Application에 붙여준다. @SpringBootApplication @EnableScheduling public class SurveasyApplication { public static void main(String[] args) { SpringApplication.run(S..
2023.10.23
embedded
-
[Connected Car & AWS] IOManager로 LED, 피에조 부저 조작
1. Vehicle.pyimport jsonfrom random import randintfrom datetime import datetimeclass Vehicle: def __init__(self): self.vin = "1HGBH41JXMN109186" self.date = datetime.now().strftime("%Y/%m/%d, %H:%M:%S") self.vehiclespeed = randint(0,160) self.fuelstatus = randint(0,100) . . . . self.airbags = {"driverairbag": "active", "pas..
2024.04.20
-
[Connected Car & AWS] Raspberry-pi 4 환경 설정 - 라이브러리, 브레드 보드
1. 라이브러리 다운로드 1-1. Python 1-1-1. Python 버전 확인 python --version // 3.5 이상이면 OK sudo apt-get install python3 // 다운로드 이력 없는 경우만 1-1-2. pip 버전 확인 pip3 --version sudo apt-get install python3-pip // 다운로드 이력 없는 경우만 이후 sudo apt-get update, sudo apt-get upgrade 한번씩 해준다 1-2. Cmake sudo apt-get install cmake 1-3. libssl sudo apt-get install libssl-dev 1-4. Git git --version sudo apt-get install git // 다운로드..
2024.04.12
-
[Connected Car & AWS] Raspberry-pi 4 환경 설정 - OS & VNC
Raspberry-pi 4의 환경을 설정해볼 것이다. 1. Raspberry-pi Imager를 이용한 OS 다운로드 1-1. Raspberry-pi Imager 다운로드 해당 사이트에서 본인 PC 운영체제에 맞는 Imager를 다운로드한다. 나는 Windows용을 받았다. 1-2. 저장소 선택 다운로드 후 다음과 같은 Imager 화면이 보일 것이다. 라즈베리파이 SD카드를 PC에 연결한 후, [저장소 클릭]을 통해 선택해준다. 1-3. Raspberry-pi OS 다운로드 [운영체제 선택] 클릭 후, 원하는 OS를 다운받는다. 나는 64bit 짜리 OS를 선택했다. 1-4. 커스터마이징 설정 OS 선택 후 [다음]을 누르면 설정 편집기를 열 수 있다. [설정 편집하기] 선택 후, 각자 환경에 맞게 설..
2024.04.08
-
[Connected Car & AWS] 독립 연구 시작
개요 작년 졸업 프로젝트 마무리 후 당근마켓에 내놓아질뻔한 라즈베리파이를 데리고 왔다. 커넥티드카를 주제로 한 졸업 논문 작성을 위해 한 학기를 함께하게 되었다. 그동안 임베디드 관련 공부를 본격적으로 해보지 못하여 아쉬움이 많았는데 덕분에 실컷 해보고 졸업할 수 있게 되었다. 다소 웹 분야에 갇혀있는 시야를 확 넓히는 경험이 되길 기대해본다. Udemy에 커넥티드카 & 라즈베리파이 & AWS 조합으로 정말 알찬 강의가 세일중이라 고민없이 바로 결제했다. 선생님 잘부탁드립니다 호홍 https://www.udemy.com/course/the-connected-car-mastering-serverless-telematics-on-aws/?couponCode=KEEPLEARNING 연구 주제 Raspberry..
2024.04.08
coding_test
-
[이취코] Chapter 03. 그리디
* 해당 게시글은 [이것이 취업을 위한 코딩테스트다, 나동빈] 교재를 학습하고 정리한 글입니다. 1. 그리디 알고리즘현재 상황에서 지금 가장 좋은 것을 골라나가는 방법현재의 선택이 나중에 미칠 영향은 고려하지 않음예) 다익스트라 알고리즘, 크루스칼 알고리즘 2. 언제 사용할까?문제를 보고 현재 상황에서 가장 좋아보이는 것을 선택할 때 문제가 풀릴 지를 파악할 수 있어야 함그리디로 판단할 때는 정당한지(= 다른 방법이 불가능한 지) 검토할 수 있어야 함 '가장 큰 순서대로', '가장 작은 순서대로' 와 같은 기준을 알게 모르게 제시해주는 편정렬 알고리즘과 함께 결함된 문제가 많음 3. 예제#include using namespace std;int coins[4] = {500, 100, 50, 10};int..
2024.10.31
-
[BoJ] #1182 부분 수열의 합 / c++
https://www.acmicpc.net/problem/1182 1182번: 부분수열의 합 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 부분수열의 합 2 초 256 MB 문제 N개의 정수로 이루어진 수열이 있을 때, 크기가 양수인 부분수열 중에서 그 수열의 원소를 다 더한 값이 S가 되는 경우의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 ..
2023.07.27
-
[C++ 줍줍] next_permutation과 순열/조합
1. header #include 2. 순열 next_permutation(v.begin(), v.end()) ex. v = {1, 2, 3, 4} (1) 입력 벡터가 다음 순열로 바뀌면서 true를 리턴 : v={1, 2, 4, 3}, true 리턴 (2) 마지막 순열까지 모두 바뀌었다면 false를 리턴 : v={4, 3, 2, 1}, false 리턴 따라서, (1)때문에 while문이 아닌 do-while문을 사용해야 하고 (처음 자신 포함하려고) (2)때문에 while문 조건문이 next_permutation이 된다. void permutation() { int arr[] = { 1, 2, 3, 4 }; do { for (int i = 0; i < 4; i++) { cout
2022.09.20
-
[C++ 줍줍] 올림, 내림, 반올림
▷ 문제 상황 1 숫자를 올림, 내림한 결과를 알고 싶다 ! ▶ 해결 방법 1 ceil( ), floor( ) 메소드를 이용 * 헤더 : #include int c1 = ceil(2.2); // c1 = 3 int f1 = floor(4.7); // f1 = 4 ▷ 문제 상황 2 숫자를 반올림한 결과를 알고 싶다 ! ▶ 해결 방법 2-1 floor( ) 메소드와 0.5 이용 * 헤더 : #include int f1 = floor(4.7 + 0.5); // f1 = floor(5.2) = 5 int f2 = floor(4.2 + 0.5); // f2 = floor(4.7) = 4 ▶ 해결 방법 2-2 round( ) 메소드이용 * C++ 11 부터 사용 가능 * 헤더 : #include int c1 = r..
2022.09.05
-
[C++ 줍줍] 문자열 자르기 : substr( )
▷ 문제 상황 문자열에서 원하는 만큼만 잘라내서 사용하고 싶다 ! ▶ 해결 방법 substr( ) 메소드를 이용 # substr( ) 사용법 1. 시작 인덱스, 길이 string s1 = "Happy"; string s2 = s1.substr(1, 3); // s2 = "app"; 2. 시작 인덱스만 이용 : 그 위치부터 끝까지 string s1 = "Happy"; string s2 = s1.substr(1); // s2 = "appy";
2022.09.05
-
[알튜비튜 줍줍] sort 함수 정리
std::sort 1. parameter 배열의 시작 위치, 끝 위치 2. 정렬 기준 [default] 오름차순 [custom] sort 함수의 3rd 인자로 다양한 비교함수 cmp를 넣어주면, 그 함수 기준으로 정렬 가능 ※ 내림차순 : sort ( , , greater()) ※ cmp (int a, int b) ① a가 b의 앞에 와야 할 경우 true를 리턴하게끔 설계 bool cmp(int a, int b) { if(a > b) return true; // a >= b 하면 안됨 return false; } ② a와 b의 우선순위가 같으면 false 반환해야 함 ( false를 리턴하는 경우, swap 한다는 사실을 숙지하고 있자! ) ③ cmp의 인자로 STL이나 클래스 객체가 전달되는 경우, ..
2022.09.03
experience
-
[렛츠인턴] 네트워킹 파티
렛츠인턴에서 네트워킹 파티가 있었다. 유사한 진로 방향을 가진 분들부터 전혀 다른 방향을 가진 분들까지 다양한 인연들과 실컷 이야기할 수 있었다. 진로 방향과 상관없이 비슷한 고민들을 가지고 있기도 했고, 내가 몰랐던 새로운 분야의 이야기도 들을 수 있어서 정말 설레고 즐거웠다. 집순이 인간이지만 앞으로도 이런 기회에 보다 적극적으로 참여해봐야겠다는 생각을 했다. 나 스스로도 누군가에게 도움이 되는 인연이 될 수 있도록 노력하자! 앞으로도 렛츠인턴 화이팅💜
2024.01.02
-
[밥약 | 백엔드] 서비스 출시
드디어 밥약이 출시되었다!! https://www.babyakmate.com/ 밥약 www.babyakmate.com 시험기간에 출시된지라 아직 밥약이 활발히 올라오지는 않았지만, 벌써 누적 가입자수가 130여명이다. (로그인 및 회원가입 API에 문제가 없다..! 휴ㅋㅋㅋㅋ) 출시 전 이대학보에서 인터뷰를 하고 기사를 발행해주셨는데, 후속 기사를 위한 인터뷰 요청도 들어와서 11월 즈음 진행될 것 같다. 신기하다. 실제로 밥약 글이 올라온 것을 보니 서비스 출시가 실감나는 것 같다. 시험 기간 이후 많은 이용자 유입에 잘 대처해서 지속가능한 서비스로 밥약을 잘 운영해보고 싶다.
2023.10.28
-
[UNIS SW 창업 해커톤] 참가 후기
활동 기간 2023.07.19 - 2023.07.21 포지션 기획, 백엔드 개발 Tech Stacks Spring Boot 3, MySQL, AWS 이번에 교내 창업 동아리 UNIS에서 해커톤을 진행한다고 하여, 백엔드 개발 포지션으로 참여했다. 그동안 여러 프로젝트에 참여했지만, 해커톤은 처음이라 기대도 긴장도 많이 되었다. 첫 해커톤 후기를 남겨보고자 한다. # Day 1 공덕 서울창업허브에서 오프라인 OT가 진행되었다. 팀원들도 처음 만나고, 주제에 대한 개요를 함께 결정하는 시간을 가졌다. 우리 팀은 기획 1, 프론트 2, 백엔드 2로 인원을 구성했다. 기획자 분께서 '실패 기록 서비스'를 제안하셔서 해당 주제의 방향성을 함께 논의했다. 단기간에 빠르게 기획부터 개발까지 진행해야 하였기에, 나는 ..
2023.07.22
-
[캡스톤디자인프로젝트] 최종 발표와 수상
드디어 1년간의 졸업 프로젝트가 끝이 났다. 오랜 기간 서비스를 기획, 개발하니까 최종 발표때는 우리 서비스의 필요성 및 기술에 대한 충분한 이해와 확신이 있었고, 그 덕에 발표도 긴장없이 잘 마무리했다. 그리고 감사하게도 장려상을 수상할 수 있었다. 최종 발표를 비롯하여 이것저것 프로젝트 회고를 해보고자 한다. 우선 이번 프로젝트를 통해 처음으로 AI 기반 서비스를 개발해볼 수 있었다. 직접 개발한 파이썬 크롤러를 통해 이미지 데이터를 수집하고, 이를 전처리하여 Yolov5 모델을 학습시키는 과정을 함께하며 AI 모델의 구현 과정 전체를 하나하나 경험해봤다. 또한, Flask를 이용하여 AI 모델을 위한 모델 서버를 개발한 후, 이를 Tencent Cloud GPU 서버에 배포해보며 웹서버와 모델 서버..
2023.06.23
-
[배리어프리] #12 최종 발표와 수상
이번 2월, 드디어 배리어프리 앱개발 콘테스트를 마무리했다. 시간은 조금 지났지만 아직 생생한 최종 발표의 순간을 회고해보고자 한다. 최종 발표는 오프라인으로 진행되었다. 오프라인 발표 자체가 굉장히 오랜만이라 긴장되면서도 설레는 기분이었다. 발표 장소에 도착하자 후드집업과 뱃지, 급속 충전기를 하나씩 배부해주셨다🙊 이런 굿즈(?) 참 좋아하는 나.....열심히 쓰겠습니다 하핳 각 팀이 발표 + 시연 영상으로 이루어진 최종 발표를 진행하고, 질의 응답을 하는 시간을 가졌다. 발표가 모두 종료된 후, 당일 바로 시상식까지 진행된다. 이 순간이 가장 긴장되었다. 오랜 기간 진행된 공모전이라 끝난다는게 시원섭섭한 마음도 들었지만, 열심히 준비했고, 준비한 모든 걸 다 보여드려서 후회는 없었다. 그래도 팀원 모..
2023.06.23
-
[캡스톤디자인프로젝트] YOLOv5 & Flask
YOLOv5 & Flask 이번에는 Flask를 이용하여 custom YOLOv5가 돌아가는 모델 서버를 만들어 볼 것이다. [참고한 자료] Python 3.7.9 Flask 2.2.3 1. 실행 환경 설정 1-1. Flask 설치 설치하면서 Module Not Found가 뜨면 시키는대로 라이브러리를 install 해준다. $ pip3 install Flask 1-2. 프로젝트 폴더 생성 원하는 위치에 프로젝트 폴더를 만든다. $ mkdir 프로젝트명 1-3. app.py 만들기 생성된 프로젝트 안에 app.py 파일을 만든다. 테스트용으로 "Hello World!"를 출력하는 코드를 작성해봤다. from flask import Flask # App INIT app = Flask(__name__) @a..
2023.04.19
career
-
[인턴일지 #7] 인턴 끝!
12/22 퇴사 후 새해가 되어서야 작성하는 인턴 종료 일지! (첫 인턴 일지와 데자뷰..)드디어 4개월간의 인턴 생활이 마무리되었다. 전공을 다루는 직장생활은 처음이라 걱정도 많았지만, 어떤 부분에서든 성장해서 나가자는 목표로 임하니까 매일매일이 배워가는 즐거움으로 금방 지나가버렸다. 내가 진행했던 업무 내용은 아래와 같다. TopicTaskJava Profiling JVM 및 JVMTI에 대한 이해 Java Profiler 3종 (pinpoint, scouter, visualvm) 환경 설정 및 사용 Scouter를 이용한 자사 테스팅 도구(cover, scouter) 프로파일링 JVM 클래스 정보 추출하는 커스텀 Java Agent 개발 Java Remote Debug Oper..
2024.01.01
-
[인턴일지 #6] Java GC, Heap Dump
https://dramatic-lift-c67.notion.site/Java-GC-Memory-Dump-df1b555892774033809377b0a669c77b?pvs=4 Java GC와 Memory Dump | Built with NotionRefdramatic-lift-c67.notion.site
2023.10.28
-
[인턴일지 #5] Java Profiling, Profilers
1. Java Profiler등장 배경프로그램 규모가 커지거나 복잡해지면 모든 JVM Internal Components가 효율적인지 모니터링 어려움특징Memory Usage, Garbage Collection, CPU Utilization 등을 분석JVMTI 이용주로 Agent - Server - UI 구조 2. Java Profiling Tools APM (Application Performance Management) PinpointScouterVisualVm형태Web ClientStandalone ClientStandalone ClientPlugins저장소HBasecompressed files AgentJava Agent• Host Agent (OS Agent)- CPU, Memory, Disk..
2023.10.28
-
[인턴일지 #4] JVM, JVMTI
[참고] Chapter 2. The Structure of the Java Virtual Machine Chapter 2. The Structure of the Java Virtual MachineConditional branch: ifeq, ifne, iflt, ifle, ifgt, ifge, ifnull, ifnonnull, if_icmpeq, if_icmpne, if_icmplt, if_icmple, if_icmpgt if_icmpge, if_acmpeq, if_acmpne.docs.oracle.com 1. Java Compile & Run1-1. Java Compile & Run 과정.java 파일 생성Java Compiler (javac)로 .java 파일 컴파일 .java → .classJ..
2023.10.04
-
[인턴일지 #3] 자사 도구 분석
2023.09.19
-
[인턴일지 #2] 프로젝트 정리
2023.09.19