본문 바로가기

전체 글502

Milestone(23년 9월 9일) 2023 09월 ~ 현재 - 외국계 회사로 이직(23년 9월 11일 첫 출근) 2022년 10월 ~ 2023년 08월 - 현직 서버 개발자 스터디 시즌1(Effective Java 완료) - 현직 서버 개발자 스터디 시즌2(가상 면접 사례로 배우는 대규모 시스템 설계 기초 완료) - 현직 서버 개발자 스터디 시즌3(토비의 스프링 v1 완료) - 첫 회사 퇴직(11개월 근무, 23년 8월 31일 퇴사) 2022년 10월 18일(취업 완료) 2022년 8월까지의 목표 1. 코딩 테스트 - Java로 자료구조 구현(완료) - LeetCode 문제 풀기 (완료) - 프로그래머스 (고득점 kit, 완료) 2. 기술면접 - 컴공 기초 지식 복습(컴공 기초, 자료구조/알고리즘, 네트워크, SQL, Spring) 3... 2023. 9. 9.
지극히 개인적인 OOP에 대한 원초적인 접근과 해석 0. 개요 요즘 스터디에서 토비의 스프링을 읽고 있습니다. 책을 읽다보니 내가 그동안 짜던 코드는 OOP적인 코드가 아니라는 것을 깨달았습니다. 머리로는 "이해하고 있다"라는 착각을 하고 있던 것이죠. 그래서 근본적인 질문과 관점으로 다시한번 OOP에 대해 배워보려고 합니다. 1. OOP란 무엇인가? OOP는 객체지향 프로그래밍(Object Oriented Programming)의 약자입니다. 그렇다면 이 객체 지향이라는 것이 무엇일까 궁금증이 생깁니다. 객체지향이라는 것은 한 묶음의 소스코드를 객체라는 하나의 단위로 보는 것입니다. 그리고 이 객체 간의 상호작용을 통해서 하나의 프로그램이 돌아가게 되는 것이죠. 마치 전대물에 나오는... 수십가지 서로 다른 로보트가 합체해서 새로운 로보트가 되는 것과 .. 2023. 8. 6.
AOP(Aspect Oriented Programming) 개념과 구현 0. 개요 - 토비의 스프링 6장을 읽다보면 AOP에 대한 이야기가 나온다. - 해당 부분에서 Proxy가 왜 등장하는지, AOP와 proxy가 무슨 관계가 있는지 등 이해할 수 없는 부분이 너무 많았다. - 즉, 내가 AOP에 대해 모르고 있기에 이해할 수 없다는 것을 깨닫고 AOP에 대해서 정리해보기로 했다. - 나와 같이 AOP 기본개념에 대해 모르는 분들에게 도움이 되기를 바란다. 1. AOP와 Proxy의 상관관계 - AOP 이야기를 할때면 프록시 이야기가 빠지지 않고 나온다. - 왜 그럴까? AOP와 프록시가 무슨 관계가 있는 것일까? 아니 그보다 프록시란 정확하게 무엇인가? - 이에 대해서 이해해보자. a) Proxy가 뭔데? - 프록시는 어떤 역할을 대신 수행하는 대상을 가리킨다. - 네트.. 2023. 7. 24.
자바에서 람다를 사용하는 방법 0. 개요 - 자바에서 람다를 잘 써보고 싶은 마음에 본 포스팅을 준비했습니다. - 우선 람다를 이해하기 위해서는 기본적인 인터페이스에 대한 이해도가 필요합니다. - 인터페이스를 시작으로 람다에 대해 배워봅시다! 1. 인터페이스를 매개변수로 받는 메서드 - 인터페이스를 매개변수로 받으면 어떻게 될까? - 한번도 의식적으로 사용해 본 적도, 생각해 본 적도, 고민해 본 적도 없는 질문이다. - 다음 코드를 보자. 예시코드 public static void main(String[] args) { static void sound(PrintThing printThing) { printThing.print(); } } public interface PrintThing { void print(); } - 위의 코드.. 2023. 6. 26.
Optional이 뭔데? 왜 쓰는데? 1) Optional을 쓰는 이유 - 어떤 객체를 조회하여 객체 내부의 값을 가져오려고 할때 해당 값이 존재하지 않는다면 NullPointerException이 발생하는 것을 자주 마주칠 것이다. 아래의 코드처럼 말이다. 예시코드(문제 제기) public class OptionalExample{ public static void main(String[] args) { Friend myFriend = findByName("Kim"); System.out.println(myFriend.getAge()); } private static Friend findByName(String name){ Friend friend = friendRepository.findByName(name); return friend; .. 2023. 6. 23.
마음 가짐에 대하여 우연한 기회로 이직제안이 왔다. 다행이라고 생각하는 것은 내가 스스로의 부족함을 잘 알고 있다는 것이다. 내가 코딩테스트 준비를 평소에 하지 않고 있다는 것도, 알고리즘을 그렇게 잘 하지 않는다는 것도, 내가 이직 준비가 되어있지 않다는 것 또한 잘 알고 있다. 변명을 하자면, 현재 내가 맡은 파트의 비즈니스를 잘 이해하고 배워가고 운영할 수 있는 능력을 더 키우고 싶을 뿐이다. 다만, 우연히 찾아온 기회를 이렇게 눈 앞에서 놓치는 것 같아 아쉬움이 많이 남는 것은 사실이며 이를 통해 꾸준히 새로운 도약을 위한 준비를 해야 한다는 것을 깨달은 나에게 응원의 박수를 보내고 싶다. 욕심부리고 싶다. 일확 천금을 원한다. 운이 좋아서 쉽게 쟁취하고 싶다. 하지만, 그러지 않고 싶다. 나보다 더 실력이 좋은 사.. 2023. 3. 28.
3년의 회고(개발자를 꿈꾸는 당신에게) 0. 시작하며 다들 안녕하시죠? 정말 오랜만에 글을 쓰네요. 취준 당시에는 취업하면 꼭 회고록을 써야지라는 다짐을 하곤 했는데, 막상 취업을 하고보니 내가 걸어온 길이 그리 대단한 길은 아니더라구요. 그때 그런 마음을 가질만큼 열심히 했구나, 지난 시간을 되돌아보며 잠시 소화하는 시간을 가졌습니다. 이번 회고는 개발자로 취직하기까지 지난 3년의 시간을 복기하고, 개발자에 도전하시는 분들에게 조금이나마 도움이 되기를 바라는 마음을 담았습니다. 그럼 시작해볼까요?! 1. 개발자가 되기까지 a) 어쩌다 3년 19년 10월에 국비교육에서 처음 개발을 시작해서 22년 10월에 취직했습니다. 따져보니 개발자가 되기까지 3년 걸렸더라구요. 제가 생각하는 신입 개발자로서 기준이 있던 것 같아요. 어쩌면 신입이라는 수식.. 2023. 1. 1.
11. SAI(RestAPI) 사용 설명서 1. SAI는 어떻게 동작하나요? - SAI는 JWT를 기반으로 요청과 응답을 제공하는 RestAPI 서버입니다. - JWT는 회원가입, 일반 로그인에서 제공됩니다. a) Filter - 회원가입과 일반 로그인을 요청할 때에는 JWT를 기반한 검증을 수행하지 않습니다. - 그 외의 요청을 할 때에는 반드시 유효한 JWT를 쿠키로 보유하고 있어야 합니다. - 이 부분은 Filter를 이용하여 구현했습니다. - 아래의 코드는 JwtFilter 클래스의 한 부분입니다. @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException.. 2022. 9. 14.
10. 배포 완료 1. SAI의 RestAPI 서버를 소개합니다. https://restsai.herokuapp.com/sai-api Swagger UI restsai.herokuapp.com - 올해 6월에 시작하여, 4개월이 지난 오늘 드디어 프로젝트 SAI RestAPI 서버의 마침표를 찍었다. - 개발 기간은 4개월이지만, 여기까지 오는데 2년이 걸렸다. - 지난 2년 동안 매일을 실수하고 개선하고 실패하고 도전하고 배우고 연습하며 스스로의 멱살을 부여잡고 왔다. - 이전에 무언가 꾸준히 하는 것을 은은하게 달리는 것이라 표현했는데, 은은하기 보다는 꽤나 치열했다. - 이제 유종의 미를 거둘 시간이다. 좋은 결과가 있기를 바란다. 2022. 9. 14.
9. 개선사항(비즈니스 로직 제거, Exception Handler 적용, DataIntegrityViolationException 처리 방법) 0. 개요 - 우연한 기회로 SI 업체에 면접을 보러 가게 되었다. - 많은 기대는 하지 않았지만, 기대 이상으로 면접 경험이 좋았다. - 문답 형식의 이론 질문이 없었고 코드를 보여주고 해당 코드를 분석하는 방식의 면접이었다. - 확실히 다른 사람이 작성한 코드에서 그 맥락을 모른 체 문제점을 파악한다는 것은 아직은 쉽지 않다. - 면접에서 내가 작성한 사이(SAI)의 코드를 보면서 RestAPI, Java, Spring에 관련된 질문을 받았다. - 그 과정에서 몇 가지 프로젝트의 개선사항을 듣게 되었고 하나씩 개선해보았다. 1. 비즈니스 로직은 Service에서 처리하자. a) 고민은 개선의 시작 - 사실 SAI를 만들면서 방법론적인 고민을 많이 했다. - 그중 하나가 비즈니스 로직의 기준에 대한 고.. 2022. 9. 12.
8. 백엔드 개발 완료(OpenAPI 소개 및 문제해결 회고록) 0. 개요 - 포트폴리오를 개발하는데 매진하여 그동안 블로그를 신경 쓰지 않았다. - 백엔드 개발이 어느 정도 완성되었다. 그래서 이번 포스팅에서는 그동안의 결과물(OpenAPI)을 소개하고 개발 과정에서 겪었던 문제점과 해결방법에 대해 소개해보려 한다. 1. 프로젝트 구조(Structure) - 6월부터 SAI를 개발하고 있다. - 프런트와 연동 작업을 진행하면서 메서드가 추가될 수는 있으나, 전체적인 구조적 측면에서는 변동이 없으므로 현재 시점에서 SAI의 백엔드 구조를 소개한다. ├─ projectSAI/sai-backend/src ├── SaiBackendApplication.java ├── api │ ├── EventApiController.java │ ├── FriendApiController.. 2022. 9. 6.
7. 오류 해결 스토리 - constraint ["PUBLIC.UK_MBMCQELTY0"] 0. 문제 설명 a) 오류 소개 - Entity에 새로운 속성을 부여하기 위해서 코드 수정을 진행하고 있었다. - 새로운 속성을 이용한 쿼리를 테스트하는 과정에서 다음 오류가 발생했다. org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["PUBLIC.UK_MBMCQELTY0FBRVXP1Q58DN57T_INDEX_8 ON PUBLIC.MEMBER(EMAIL) VALUES 5"; SQL statement: insert into member (email, member_name, password, sign_up_date, visibility, member_id) val.. 2022. 7. 30.