전체 글 35

2023년 나의 회고록

2023년, 1년간의 나의 회고록 벌써 2023년이 다 지나고 2024년까지 이틀밖에 안남았다... 뭐했다고 24살인지....난 아무것도 안한거 같은데 시간이 내 성장을 기다려주지 않고 막 흘러버린다.. 그래도 이렇게 그저 흘러가는대로 흘러가버린다면 분명 난 진짜 성장하지 않는 사람이 되고 말 것 이다. 그래서! 내가 올해 무엇을 했고, 무엇을 얻었는지 천천히 한번 회고해보고자 한다! 1. 공부 올해 초 사실 내 목표는 학교에서 성적 장학금을 받아보는 것 이었다. 그래서 나름 학교 수업에도 열심히 집중하고 과제도 정성스레 제출하고 해보았지만.... ...??? 전공 A, A+ 맞고 교양 다 조지기..... 항상 느끼는 거지만.. 교양과목의 내용이 전공과목에 비해 쉽다 보니 매번 나는 교양 공부에 대해 안..

카테고리 없음 2023.12.29

@OneToMany, @ElementCollection

트리플 클론 코딩을 하면서 여행지 추천 기능을 구현해야했다. 이때, 추천받은 여행지에 대해 사용자는 좋아요(찜) 을 할 수 있어야 했으며, 자신에게 달린 리뷰들을 저장해야 했다, 따라서 추천받은 여행지는 자신을 좋아요를 누른 사용자들의 id값을 List형식으로 가지고 있어야 하고, 자신에게 달린 Review들을 List형식으로 가지고 있어야 했다. 엔티티에 List를 저장하기 위해서는 @OneToMany를 통해 연관관계 매핑을 하거나 @ElementCollection을 사용, @Convert의 사용 이 3가지를 들 수 있으며 @Convert는 List를 String 형식으로 변환하여 저장하는 기능이고, 이번에는 @Convert를 제외한 @OneToMany와 @ElementCollection의 장단점들을 ..

백엔드 멘토링 2023.12.01

단축 url 서비스 Base62으로 리팩터링하기 - 회고록

이번 단축 url 서비스 토이 프로젝트를 진행함에 있어서 나는 단축된 url로 제공할 임의의 문자열이 필요했다. 그래서 초기에 나는 random 값을 사용하여 ASCII CODE에서 무작위로 문자, 숫자를 불러오자! 라고 생각하여 아래와 같이 코드를 작성했었다. public void makeKey() { randomKey = levelingKey(random.ints(AsciiCodeIndexForRandomString.NUMBER_START_IN_ASCII_CODE.index, AsciiCodeIndexForRandomString.LOWER_ALPHABET_LIMIT_IN_ASCII_CODE.index) .filter(i -> (i = AsciiCodeIndexForRandomString.UPPER_A..

백엔드 멘토링 2023.10.08

자바의 신 - 복습 정리(2)

- 자바의 동작 과정 자바 코드를 작성한다 -> .java 파일 Java Compiler(javac)가 .java파일을 .class파일로 컴파일 한다. .class 파일들이 JVM에 들어가 Class Loader가 클래스들을 JVM에 올린다. JVM에 있는 class 파일들이 Interpreter와 JIT Compiler에 의해 해석된다. 해석된 바이트 코드들을 Runtime Data Area로 옮겨져 실질적인 실행이 된다. - JIT Complier = java JVM에 있는 컴파일러로 자주 사용되는 메서드나 클래스를 캐시에 저장시켰다가 필요할 때 컴파일 해서 준다. - warm-up = 성능 확인 또는 향상을 위해 JIT 컴파일러의 캐시에 원하는 데이터가 캐싱되도록 유도하는 것을 말함 - 쓰레드? 프..

백엔드 멘토링 2023.09.23

Transaction이란?

Transaction이란? Transaction이란 데이터의 상태를 변화시키기 위한 작업들의 집합 단위이다. Spring에서 @Transactional의 동작과정 @Transaction이 적용되어 있을 경우 해당 클래스에 대한 트랜잭션 기능이 적용된 프록시 객체가 생성된다. 이 프록시 객체는 @Transactional이 포함된 해당 메서드가 호출될 경우 트랜잭션을 시작하고, 정상 여부에 따라 Commit 또는 Rollback을 수행한다. 정상여부는 default로 RuntimeException이 발생했는지 안했는지의 기준으로 결정된다. Transaction의 특징 Transaction은 ACID라고 불리는4가지의 특징이 있는데 원자성 (Atomicity) : 트랜잭션이 데이터베이스에 모두 반영되던가, 아..

백엔드 멘토링 2023.09.23

2023-08-29 DB 관련 질문 정리

- RDBMS는 무엇일까? = RDBMS는 관계형 데이터 베이스를 관리하는 소프트웨어를 뜻하며, 모든 데이터를 2차원 테이블로 표현한다. - 장, 단점은 무엇인가? 장점 데이터의 일관성과 무결성은 유지할 수 있다. SQL을 통하여 데이터를 조작 및 조회가 가능하다 테이블 간의 관계를 통하여 복잡한 데이터 모델의 구축이 가능하다. 보안 및 복구와 백업을 지원한다 단점 대규모의 DB를 설계하고 관리 할 경우 높은 복잡성을 요구할 수 있고, 모델링이 잘못 구성될 경우 성능 및 유지보수에 문제가 발생한다 테이블 간의 조인등 복잡한 쿼리를 실행시 성능 이슈가 발생할 수 있다. 상용 RDBMS를 사용함에 있어 비용이 부담될 수 있다. - NoSQL이란? = Not Only SQL의 약어로 비관계형 데이터베이스이다...

백엔드 멘토링 2023.08.30

객체지향의 사실과 오해 후기

이번에 객체지향의 사실과 오해라는 책에 대해서 읽게 되었다. 이는 객체지향적 설계를 잘하는 법에 관련하여 서술하고 있었고, 이로 인해 나도 많은 도움을 얻었다. 이 책에서 말하는 객체지향의 오해란 많은 사람들이 객체지향은 현실세계의 모방이라고 생각한다는 것이다. 하지만 책의 작가는 우리가 현실세계에는 없는 객체마저 객체지향의 세계에서는 생성이 가능하기에 객체지향은 현실세계의 모방이 아닌 은유라고 하였다. 예를 들자면 현실세계에서는 전구 스스로 불을 켰다 껐다 할 수 없지만 객체지향의 세계에서는 이것이 가능하며, 이상한 나라의 앨리스를 객체지향 세계로 만든다 하였을 때는 현실세계에서는 존재할 리 만무한 트럼프 인간등이 등장하게 되는 것이다. 따라서 우리는 현실세계의 객체들에 대해 중요한 포인트만 뽑아 객체..

백엔드 멘토링 2023.08.27

자바의 신 - 복습 정리(1)

-IDE란? = 통합 개발 환경으로 개발자가 효율적으로 개발하도록 도와주는 소스 코드 편집기 -마크업 언어란? = 태그 등을 이용하여 문서나 데이터의 구조를 명기하는 언어의 한 가지 -C언어, Python, Java의 차이? = C언어 : 절차지향 언어 Java, Python : 객체지향 언어 - 자바의 특징 = 객체지향 언어이며, jvm이라는 가상 머신을 사용하기 때문에 이식성이 좋고 GC가 자동으로 메모리 관리를 해주기 때문에 편리하다 - 컴파일이란 = 고수준 언어(C, Java등등)을 컴퓨터가 이해할 수 있는 언어로 바꾸어 주는 과정 - JVM이란 = Java Virture Machine의 약어로 자바안에 내장된 가상 컴퓨터이다, 이로 인해 이식성이 좋다는 장점이 있지만 속도가 저하된다. - 객체란..

백엔드 멘토링 2023.08.27

RestTemplate vs webClient vs openFeign 차이

Spring framework 에는 다양한 http 요청 방식을 통해 웹서비스와의 통신이 가능합니다. 가장 주로 사용되는 http 요청 방식 3가지인 restTemplate vs webClient vs openFeign에 대해 매우 간단하게 알아보겠습니다. 1. RestTemplate RestTemplate은 Spring에서 제공하는 동기식 http 통신을 위한 방법입니다. 주로 MVC기반의 프로그램에서 사용되며 JSON, XML등 다양한 형식의 데이터를 처리 할 수 있습니다. 장점 간단한 구성과 사용법 예전 버전의 Spring에서도 사용 가능 다양한 http 클라이언트 설정 가능 단점 동기 방식을 기반으로 하기에 병렬 처리가 어려움 non-blocking 요청 처리가 불가능 2. WebClient We..

백엔드 멘토링 2023.08.27

Car-Racing 토이 프로젝트 step 1 회고록 (1)

2023.06.15 토이 프로젝트 시작 3학년 여름 방학 때 공부하며 아주...작은..토이 프로젝트를 하나 진행하였다. 자동차 경주 게임을 개발하는 일 이었는데 인터넷을 검색해보니 이미 유명한 프로젝트였고, 여러 코드들도 많이 있었지만 무슨 객기인지 다른 사람의 코드를 보고싶지 않았다. 그걸 보게 되면 처음 설계부터 기능 요구사항 까지 연습하려던 계획이 무산될 것 같았다ㅋㅋ 처음 프로젝트 시작할때는 기능 요구사항, README.md를 먼저 작성해 주었다. 다른 사람들이 어떻게 README를 작성하는지 참고하며 나도 따라 썼던 것 같다. 개발 기간과 개발 환경은 그렇다 쳐도 요구사항 부분은 수정해야 할 부분이 참 많아 보인다. 나는 개인적으로 받고있는 멘토링을 해주시는 멘토분이 코드 리뷰를 해주셨는데, R..

백엔드 멘토링 2023.07.11