본문 바로가기

프로젝트 개발 기록51

다시 돌아온 병아리 신입 주디 #1 Batch 처리에 대해 알아보자 🫧 휴.. 금융권에서 풀스택 하게 될걸 각오하고 왔는데 정말 운 좋게도 모바일 팀에 들어가게 되어서 서버 개발을 하고 있다..! 정말 자바 쓸 수 있는 것만으로도 행복🕺✨ /** 실제로 동기들은 자바 쓰는 팀이 거의 없다. tmi로 금융it를 준비한다면 쿼리 짜는 거!! 진짜 중요!! 별표 다섯 개⭐️⭐️⭐️⭐️⭐️ 🐰: SQLP도 따고 싶은데.. 아 너모 어려와여.. SQLD랑 난이도 격차가 너모 큰 거 아니오? 🤖: 변명이야!!! 공부해!!! 🐰: 넵.. **/ 그래도 혹시나 하는 마음으로 최근엔 프론트 코드도 보면서 공부하고 있었는데 완전 서버 개발로 직무를 주셔서(?) 안심하고 다시 서버 공부로 돌아왔당..! 아직 크게 업무가 많지는 않아서 이럴 때 많이 많이 공부해 두자!! 회사 내부 배치 시스템을.. 2024. 3. 24.
드디어 업무를 받을 위기(?)의 주디. Maven+MyBatis로 간단한 예제 만들어보기 (몇 주 전에 올렸는데 왜 노출이 안 됐지..ㅠ) 연수가 끝난 후 본격 부서에 배치된 박주디. 첫 주는 하루에 3잔씩 음료를 얻어먹고, 매일매일 인사하기 바쁘다. 다행히 나는 하루 만에 개발망 피씨를 받았다. 딱히 하는 일이 없었는지 어언 3주. 그리고 그녀에게 곧 서버 개발이 주어질 것이라는 예고장이 날아오는데.. 🥷 : 다음 주에 간단한 개발 건 정리해서 드릴게요. 프로젝트 많이 해보셨어요? 🐰주디 : ㅇ..예..! 자.. 자신 있습니다..! 🤖 : 야! 너 개발 환경 세팅받아서 코드 본 지 2시간이고, 권한 받은 지도 2시간이잖아. 그리고 너 MyBatis 해봤어? JPA만 했잖아. 너 Maven 써봤어? Gradle 썼잖아. 너 SVN 써봤어? 너 Git만 썼잖아. 너 폐쇄방에서 개발해 봤어? 너.. 2023. 11. 1.
[AWS S3+Lambda] 이미지 처리 2탄: Image Resizing으로 썸네일 이미지 만들기 📷 이미지 처리1탄에서는 pre-signed URL을 이용해서 이미지 업로드를 구현했다. 근데 실제로 우리가 화면에서 이미지를 보여줄 때 원본 이미지 파일을 전부 보여주기엔 파일이 너무 크다. 그래서 리사이징을 함으로써 데이터를 전송하는 과정에서도 더 효율적으로 서버를 운영하고, 프론트에서 이미지를 렌더링 할 때의 시간도 줄여보자. 📑 목차[AWS S3] 이미지 처리 1탄: Pre-signed URL로 파일 업로드 구현 [AWS S3+Lambda] 이미지 처리 2탄: Image Resizing으로 썸네일 이미지 만들기 - 현재 포스팅 💭 고민이미지 리사이징을 어떻게 구현할지 고민했다. [ 리사이징 시기 ]Resize during UploadOn-demand Resize 이미지를 요청할 때 리사이즈해 줄지.. 2023. 6. 28.
[AWS S3] 이미지 처리 1탄: Pre-signed URL로 파일 업로드 구현 📷 이미지 처리 📑 목차 [AWS S3] 이미지 처리 1탄: Pre-signed URL로 파일 업로드 구현 - 현재 포스팅 [AWS S3+Lambda] 이미지 처리 2탄: Image Resizing으로 썸네일 이미지 만들기 프로젝트에서 이미지 업로드 기능을 구현해 본 경험이 있을 것이다. 나는 예전 프로젝트에서 Form data로 서버에 파일을 전송하면, 서버에서 S3에 파일을 업로드하고 해당 URL를 반환해 주는 Flow로 구현했다. ✔️ 서버를 통해서 업로드 1. Client에서 Server로 Form Data로 Image 파일 전송 2. Server는 AWS S3에 이미지 업로드 3. 저장된 URL 받음 4. Server에서 이미지 URL 반환 이 방식은 서버에서 AWS Key 정보를 가지고 있고,.. 2023. 6. 27.
[JPA] 1차 캐시(First-Level Cache), 2차 캐시(Second-Level Cache) 이번주 스터디 주제는 JPA 캐시이다!! 역시 일단 캐시가 뭔지 알아야겠징?! 캐시부터 알아보자! (CS 면접 준비 중이라면... 주디의 스터디로 놀러오세용~ 7개월 동안 꾸준히 하고 있답니당) ✅ 캐시 (Cache) 캐시란? '사용되었던 데이터는 다시 사용될 가능성이 높다'는 개념을 이용하여 데이터나 값을 미리 복사해 놓는 임시 장소 우리가 생각하는 것보다 네트워크를 통해 데이터베이스에 접근하는 시간 비용은 애플리케이션 서버에서 내부 메모리에 접근하는 시간 비용보다 훨씬 비싸다. 아래 메모리 계층 사진을 보아 알 수 있듯이 위로 올라갈수록 용량이 적고 가격이 비싸지만, 속도가 빠른 것을 알 수 있다. Secondary Memory는 SDD, HDD이다. 즉, 데이터베이스는 Secondary Memory.. 2023. 6. 25.
[Spring] @Valid로 DTO 검증하기 1. 검증은 왜 필요할까? 컨트롤러의 중요한 역할 중 하나는 HTTP 요청이 정상인지 검증하는 것이다. 🤖 : 근데 클라이언트에서 잘못된 요청은 걸러주지 않아? 🐰 : 그럼 클라이언트를 거치지 않은 요청은 다 받아줄겨? 클라이언트 검증은 조작할 수 있어 보안에 취약하다. 또한 서버에서도 잘못된 요청을 검증하는 로직을 필요하다. 그리고 나는 그 중 DTO에서 데이터를 검증하는 방법을 알아보려고 한다. 2. Bean Validation Bean Validation은 특정한 구현체가 아니라 Bean Validation 2.0(JSR-380)이라는 기술 표준이다. 즉, 검증 애노테이션과 여러 인터페이스의 모음이다. Bean Validation을 구현한 기술중에 일반적으로 사용하는 구현체는 하이버네이트 Valid.. 2023. 6. 8.
[Spring] Spring Security 개념과 처리 과정 👮‍♀️ (+근데 상황극을 곁들인) 오늘도 노드 마을에서 온.. 토끼는 낯선 기술에 울고 있다..(?) 그렇다.. 유저가 있는 서비스라면 인증과 인가 처리는 필수이다. Spring에서는 Spring Security라는 프레임워크로 관련 기능을 제공하고 있다. 꽤 넓고 내용이 많은 파트이다. CS 스터디를 동기 삼아 건드리기 무서웠던 파트를 한 번 공부해 보자. 오늘은 Security 개념과 처리 과정에 대해서 알아보려고 한다. 👮‍♀️ Spring Security /** 평화로운 토끼 마을 */ 토끼 마을에 입장하기 위해서는 신원을 입증해야 한다. 🐰 : 안녕하세요. 토끼입니다. 저는 토끼마을 주민이에요. 딱 봐요? 토끼상이됴? 🤖 : 삐빅. 박.주.디. 신원이 입증되었습니다. 방금 주디가 한 것이 인증(Authentication)이다. .. 2023. 6. 1.
[Git] 개발 생산성 향상을 위한 Git Hooks 활용 (with. Spotless) 🎣 🖇️ 관련 글 : 코딩 컨벤션 설정 | Spotless, Checkstyle ⚙️✨ 지난 글에서 Spotless 설정을 했다. 하지만 매번 Spotless Apply / Spotless Check를 통해 컨벤션을 적용하고 확인하는 작업이 번거롭다는 생각을 했다. 컨벤션이 지켜지지 않을 때 build가 실패하게 되는데 만약 적용하는 것을 깜빡하고 커밋을 하게 된다면? CI workflow에서 체크해 줘서 머지할 때 오류는 없겠지만.. 그래도 커밋할 때부터 이 오류를 잡아줄 순 없을까? 이런 휴먼 에러를 방지하고, 반복되는 작업을 Git Hooks를 활용하여 자동화함으로써 개발 생산성을 높이려고 한다.⚙️ 프로젝트 환경java : 11Spring Boot : 2.7.11멀티 모듈 프로젝트Build Tool:.. 2023. 5. 21.
[Java] Gradle.. Gradle 말입니다. 자바 빌드 도구 🐘 자바 프로젝트를 진행하면서 빌드 도구를 많이 접해볼 것이다. 최근에 프로젝트 세팅을 하면서 Gradle, 이 친구 설정을 많이 변경하고 사용했다. 그런데 말입니다.. 빌드 도구는 여러 가지 있단 말이됴? 그리고 Gradle을 사용하면서 왜 사용하는지, 어떻게 사용하는지 알고는 있나요?! 🤖 : 거.. 살살 하세요. 지금 공부하려고 하잖쇼? 🐰 : 뭐야.. 웬일로 내 편을 들어주니? (떠오르는 과거의 기억..) 1. Build Tool (소프트웨어 개발에서) 소스 코드를 실행 가능한 애플리케이션으로 만들어주는 도구 소스코드의 빌드 과정을 자동으로 처리해주는 도구 외부 소스 코드 (외부 라이브러리) 자동 추가, 관리 종류: APACHE ANT, Maven, Gradle [ Ant(앤트) ] 설정을 위해 XM.. 2023. 5. 19.
[Gradle] Jacoco 적용하고, Codecov로 테스트 커버리지 관리하기 난 지금까지 프로젝트에서 테스트 코드를 열심히 작성하지 못했다.. 크흡 우리 팀 고수 개발자분... 커버리지 80% 이상으로 작성한다고 하셔서.. 리스팩 👏 🤖 : 너도 할 수 있지? 🐰 : 8%? ㅎㅎ.. 농담.. (진짜?) 이번에 열심히 작성해 보기로 했으니... 파이팅~! (후후.. 어서 와 JUnit은 처음이지?) 그리고 프로젝트에서 Jacoco와 Codecov를 적용하려고 한다. 근데 잠깐!! 코드 커버리지는 뭐고, 저 도구들은 뭐야? 그리고 왜 필요해? 🤖 : 그말 왜 안 하나 했다. 해당 도구들의 사용법을 익히기 전에 개념부터 살펴보자. 0. Test Code 테스트 코드는 왜 작성해야 할까. 예전 프로젝트에서는 시간이 부족하다는 이유로 테스트 코드 작성을 소홀히 했다. 하지만 테스트 코드가.. 2023. 5. 14.
[Git] Submodule로 민감 정보 관리하기 (.yml 파일) 프로젝트를 진행할 때 보안상 문제로 Git에 올리지 못하는 데이터가 있다. 대표적으로 DB 인스턴스의 정보를 저장하는 .yml 파일이 있다. 서브모듈을 활용하면 민감 정보를 더 편리하게 관리할 수 있다. 📂 Submodule Git 레포지토리 하위에 다른 저장소를 관리하기 위한 도구 Git 저장소 안에 다른 Git 저장소를 디렉터리로 분리해 넣는 것이 서브모듈이다. 다른 독립된 Git 저장소를 Clone 해서 내 Git 저장소 안에 포함할 수 있으며 각 저장소의 커밋은 독립적으로 관리한다. 이때 상위 레포지토리를 상위 레포지토리를 부모 저장소, 슈퍼 프로젝트(superproject), 하위 레포지토리를 자식 저장소, 서브 모듈(submodule)이라고 부른다. ✨ 주의할 점 부모-자식 관계라고 부모가 자.. 2023. 5. 11.
코딩 컨벤션 설정 | Spotless, Checkstyle ⚙️✨ 여러 개발자들이 작업을 할 때 코딩 컨벤션을 정하게 된다. 컨벤션을 정하게 되면 가독성을 높일 수 있다. Spotless 적용하는 방법과 네이버 코딩 컨벤션을 Code Style Formatter로 설정하고, Checkstyle 적용하는 방법 두 가지에 대해서 알아보자. 1️⃣ Spotless Keep your code spotless 여러 개발자가 협업하는 환경에서 코드 컨벤션을 지키기 위해 사용하는 플러그인이다. 컨벤션이 지켜지지 않을 경우 build가 실패한다. ✔️ Install Guide build.gradle plugins { id 'com.diffplug.spotless' version '6.11.0' } ✔️ Setting Guide 이 부분은 팀 컨벤션에 맞춰 설정해 주면 된다. buil.. 2023. 5. 9.
[Java] Mutable, Immutable, 방어적 복사, unmodifiableList 🎇 Mutable, Immutable 자바는 new 연산자로 객체를 생성힐 수 있고, 이때 heap 영역에 할당되고 stack 영역에서 참조 타입 변수를 통해 데이터에 접근한다. 이때 자바의 객체의 타입은 두 가지 있다. Mutable(가변) 객체와 Immutable (불변) 객체이다. ✔️ Immutable(불변) 객체 불변 객체 : 객체 생성 이후에는 객체의 상태가 바뀌지 않는 객체 불변 객체 종류: String, Boolean, Integer, Float, Long 등 String을 제외하고 원시 타입의 wrapper 타입이다. 🤖 : 오잇! 나 String 타입 변경한 적 있는 거 같은데? 🐰 : 오.. 이 상황을 말하는 거야? String name = "정윤"; name = "jeongyoon".. 2023. 5. 2.
[Git] 한 repository 여러 프로젝트 월세주기 🏡 🐰 주디 요구사항 많은 사람들의 (👤1명). 뜨거운 관심 속에 스프링 놀이터를 만들고만 주디.. 기존에 각각의 레포를 만들어서 여러 실습도 진행해 보고 강의 코드도 정리하고 있었다. 갈수록 많아지는 레포는 찾아보기 힘들고 놀이터도 만들었겠다. 놀이터에서 놀아줘야지. 주디는 아래의 요구사항을 가지고 있다. 빈 레포로 기존 깃에 있는 레포를 옮기고 싶다. 당연히 소중한 커밋 기록도 들고 가고 싶다. 한 레포에 여러 프로젝트를 관리하고 싶다. 자 그러면 지금 이사가보자!! 뚠뚠~ 🐜 0. 초기 세팅 1) 부모 repository 부모 역할을 할 레포지토리를 만든다. 2) 자식 repository 자식 역할을 할 레포지토리를 생성하거나 선택한다. 1. 부모 repository를 로컬에 clone 한다. $ gi.. 2023. 4. 24.
멀티 모듈, 그게 뭔데? 그거 어떻게 하는건데? 🧐 때는.. 바야흐로 일주일 전... 디프만 OT.. 👥 우리 서버팀 : 웅성👥 웅성 👥 웅ㅅ멀티 웅성성 모듈 웅성👥 🐰 주디박 : 뭔데?!! 멀티??? 모??? 뭐라고요?? 멀티 모듈??? 그게 모지!!? DDD???? 👥 우리 서버팀 : 한 프로젝트에 여러 모듈 개발하는 방법이 있어요!! 🐰 주디박 : 예??? 아~~~~ 그렇구나~~~ (모르겠음) 우리 서버팀에서 도전하고 싶어 하고 궁금해하는 멀티 모듈!!! 그게 뭘까? 팀에 도입하고 싶은데 우선 나는 궁금해졌다. 그게 뭔데? 그게 왜 필요한데??? 그래서 공부를 시작했다. 두둥 탁 1. 멀티 모듈 프로젝트✔️ 모듈Oracle Java 문서에서 모듈이란 패키지의 한 단계 위의 집합체이며, 관련된 패키지와 리소스들의 재사용할 수 있는 그룹이라고 정의하고 .. 2023. 4. 17.
반응형