본문 바로가기

프로젝트 개발 기록/[개발] java | spring24

다시 돌아온 병아리 신입 주디 #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.
[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.
코딩 컨벤션 설정 | 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.
멀티 모듈, 그게 뭔데? 그거 어떻게 하는건데? 🧐 때는.. 바야흐로 일주일 전... 디프만 OT.. 👥 우리 서버팀 : 웅성👥 웅성 👥 웅ㅅ멀티 웅성성 모듈 웅성👥 🐰 주디박 : 뭔데?!! 멀티??? 모??? 뭐라고요?? 멀티 모듈??? 그게 모지!!? DDD???? 👥 우리 서버팀 : 한 프로젝트에 여러 모듈 개발하는 방법이 있어요!! 🐰 주디박 : 예??? 아~~~~ 그렇구나~~~ (모르겠음) 우리 서버팀에서 도전하고 싶어 하고 궁금해하는 멀티 모듈!!! 그게 뭘까? 팀에 도입하고 싶은데 우선 나는 궁금해졌다. 그게 뭔데? 그게 왜 필요한데??? 그래서 공부를 시작했다. 두둥 탁 1. 멀티 모듈 프로젝트✔️ 모듈Oracle Java 문서에서 모듈이란 패키지의 한 단계 위의 집합체이며, 관련된 패키지와 리소스들의 재사용할 수 있는 그룹이라고 정의하고 .. 2023. 4. 17.
[Java] 람다와 스트림 (Lambda & Stream) 람다식 (Lambda Expression) 함수(메서드)를 간단한 '식(expression)'으로 표현하는 방법 익명 함수(이름이 없는 함수, anonymous function) 함수와 메서드의 차이 근복적으로 동일. 함수는 일반적 용어, 메서드는 객체지향개념 용어 함수는 클래스에 독립적, 메서드는 클래스에 종속적 // 반환 값이 있는 경우 (int a, int b) -> a > b ? a : b // 매개변수의 타입이 추론 가능하면 생략가능(대부분 경우 생략가능) (a, b) -> a > b ? a : b ✔️ 함수형 인터페이스 단 하나의 추상 메서드만 선언된 인터페이스 함수형 인터페이스 타입의 참조변수로 람다식을 참조할 수 있음 MyFunction f = (a, b) -> a > b ? a : b; .. 2022. 11. 13.
[Java] 코딩테스트 대비 정리 (2) 처음부터 다 알려고 하지 말자! 문제 풀면서 새로 알게 된 개념. 기억하고 싶은 개념을 기록하자. 형변환 ✔️ String -> int 1) Integer.parseInt(String s) int 타입을 리턴한다. 2) Integer.valueOf(String s) parseInt와 다르게 Integer Object를 리턴한다. 그리고 .intValue()를 사용하여 int 타입으로 형변환할 수 있지만 붙이지 않아도 자동으로 형변환이 된다. ✔️ String -> char[] 1) str.toCharArray() 이때 str은 String 타입이다. ✔️ int -> String 1) Integer.toString(int i) 2) String.valueOf(int i) 3) i (int타입의 값) + .. 2022. 11. 7.
[Java] 코딩테스트 대비 정리 (1) 동적 타입 언어인 파이썬과 자바스크립트에 적응한 나란 몸.. 정적 타입 언어 자바를 쓰려니 참 어렵다... 휴 자바 미션과 코딩테스트를 대비해서 헷갈렸던 개념을 정리하면서 공부해보자! List 클래스 자바에서 List를 만들때 List 인터페이스를 구현한 ArrayList나 LinkedList와 같은 객체를 생성하게 되는데 Arrays.asList()와 List.of() 메소드로도 생성할 수 있다. 1) Arrays.asList() List strList = new ArrayList(Arrays.asList(splitArray)); 2) List.of() List.of() 메서드는 JAVA 9 부터 지원하는 메서드이다. char 배열과 String 클래스 차이 코드를 짤 때 문자열 저장은 String 타.. 2022. 10. 29.
반응형