본문 바로가기

오일 추천 웹 서비스 구축(프로젝트 시작) Part.1 "취미를 본업으로 가져와 볼까?" 개인적으로 일상의 스트레스를 해소하고 마음을 다스리기 위해 아로마 오일에 자연스럽게 관심을 갖게 되었습니다. 하지만 주변을 보니 아로마 오일을 처음 접하는 사람들은 종류도 너무 많고, 효능이나 사용법이 생소해 심리적 진입 장벽이 크다는 것을 깨달았습니다."어떻게 하면 힐링이 필요한 사람들이 쉽고 빠르게 자신에게 딱 맞는 오일을 접하고 일상에서 활용할 수 있을까?"이 고민에서 시작하여, 복잡한 오일 지식 없이도 몇 가지 간단한 질문만으로 나만의 향을 찾아주는 초간단 맞춤 아로마 오일 추천 웹 서비스를 기획하게 되었습니다. 또한, 이번 프로젝트를 통해 "AI 도구를 적극 활용하여 MVP(최소 기능 제품)를 빠르게 개발하고, 지속적으로 고도화·확장하는 경험"을 직접 해보고 싶..
AI를 활용한 빠른 생산성, 그 대가는 무엇인가? AI를 권하는 사회, 우리는 무엇을 놓치고 있는가? 요즘 개발자들 사이에서 자주 듣는 이야기가 있다.“회사에서 AI로 생산성을 높이라고 한다” 단순히 개발자들만의 이야기는 아니다. AI의 등장 이후, 전문성의 경계가 흐려지고 있다.“이제 누구나 개발이나 디자인을 할 수 있다”는 인식이 점점 퍼지고 있다.여기에 경제 상황까지 겹치면서, AI는 단순한 도구를 넘어 인력을 대체할 수 있는 수단처럼 받아들여지고 있는 분위기다. 얼마 전 컨퍼런스에서도 비슷한 흐름을 느꼈다. AI를 활용한 취업 전략, 업무 자동화에 대한 관심이 매우 높았다.구경하던 도중 한 부스에서는 이런 이야기가 나왔다. “어디에 써야 할지는 모르겠지만, AI 붐에 뒤처질까 봐 도입하려는 사장님들도 많습니다.” 이 말을 듣고 하나의 의문이 생겼..
[생활밀착] mysql 시스템 변수 변경 2022/05/13 상황 : mysql 에서 제공하는방식을 사용하여 데이터를 암호화 및 복호화하여 검증하는 쿼리를 작성 했다. mysql에서 기본적으로 제공하는 암호화 모드를 사용하려 했으나 서비스 로직에서 사용하는 암호화 방식이 달라 수정 후 사용 하려던 중, 기본 값을 세팅하는 방법으로 @는 사용자 정의 변수, @@는 시스템 변수 설정하는 것을 알게 되었다. 그래서 서비스 변수를 변경하는 것이니 @@(암호화 모드) = "" 를 사용하여 암호화 후 서비스에서 사용하는 encrypter로 복호화 하니 원본 데이터와 값이 일치했다. 그러나 장소를 바꿔서 디비 연결 후 다시 암호화 후 복호화 하여 값을 비교하니 일치하지 않는 문제가 발생했다. 원인 : @@(변수)가 시스템 변수를 설정하는 것은 맞았다. 그러..
날짜와 시간의 형식화 getInstance() - 기본적으로 시스템의 날짜와 시간에 대한 벙보가 담겨 있음, 인스턴스를 반환 받을 수 있다 -static 인스턴스이다. static이 아니라면 객체 생성 후 호출해야하는 데 Calendar는 추살클래스이기 때문에 객체 생성이 불가능하기 때문이다 태국의 경우 , BuddhistCalendar , 그외에는 GregorianCalendar의 인스턴스를 반환 Calendar → Date Calendar cal = Calendar.getInstance(); Date d = new Date(cal.getTimeInMillis()); // Date(Long date) Date → Calender Date d = new Date(); Calender cal = Calender.getInsta..
RestTemplate vs WebClient(+동기/비동기) RestTemplate WebClient spring 3.0 spring 5.0 blocking / 동기 non-blocking / 비동기 각각의 쓰레드가 응답을 받을 때까지 쓰레드가 동작하지 않는 동기화 모델 이벤트 루프 방식을 구현한 reactive stream API를 사용 요청 증가 → 해당 요청 쓰레드 생성 → 쓰레드풀 소모 → 메모리 소비 증가 → 빈번한 컨텍스트 스위칭으로 성능 저하 / 요청 수에 연관 되어 성능 저하가 발생한다. task생성 → 큐에 저장 후 응답이 있는 경우에 처리 : 요청에 관계 없이 일정한 성능을 제공한다. getForObjct() getForEntity() : responseEntity postForObject() postForEntity() patchForObjec..
[W.I.L]CommandLineRunner, ApplictionRunner 작업을 호출하지 않고 모든 로직을 수행하는 어플리케이션을 만들기 위해서 공부하다가 알게 되었다. application실행 시에 동작을 할 수 있는 것이 ApplictionRunner와 CommandLineRunner 두가지가 있다. 차이점은 ApplicationRunner는 단순 인자의 스트링 배열을 포함한 추상화한 ApplicationArguments 타입의 객체가 Run()메소드의 인자로 넘어오고 CommandLineRunner는 기본적인 Array 형태로 argument가 Run()메소드의 인자로 넘어온다. CommandLineRunner란? 특정 Bean을 Application 실행 후 실행하도록 하는 인터페이스이다. 이는 ApplicationRunner도 같다. 클래스로 구현해서 사용해야 한다...
[W.I.L]ThreadPoolExecutor ThreadPool 이란? 생성 가능한 최대 스레드의 갯수를 정해 놓고 작업 큐에 저장 되는 작업들을 하나씩 쓰레드 풀에 존재하는 쓰레드가 처리하도록 하는 방법이다 . 직접 쓰레드를 관리하고 싶다면 ThreadPoolExecutor 클래스의 인스턴스를 생성자로 생성하여 사용하면 된다. ThreadPoolExecutor는 생성자를 사용하여 corePoolExecutor, maximumPoolSize, keepAliveTime, workQueue등을 설정할 수 있다. 생성된 쓰레드들은 main 쓰레드가 종료 되더라도 작업을 마칠 때 까지 Runnable 상태에 남아 있게 된다. 따라서 프로세스를 종료 시키려면 쓰레드 풀의 쓰레드 들이 모두 Terminated 상태가 되도록 유도 해야 한다. ThreadPoo..
BufferedReader와 BufferedWriter BufferReadder의 사용법 메소드 : readLine(), close() readLine() : 입력값을 String으로 바꾸는 메소드 / 반드시 한 줄씩만 읽는다 close() : BufferdReader를 다 사용한 후 입력 스트림을 닫기 배열의 사이즈 구하는 방법 : readline()으로 읽고 결과 값을 Integer.parseInt()로 int타입으로 변경 줄에 있는 요소 하나하나 가져오는 방법 : readLine()으로 읽고, StringTokenizer나 Split()을 통해 요소를 하나씩 읽고 배열에 값을 넣기 public static void main(String[] args) throws IOException { // BufferedReader를 사용하기 위해서는 throws ..