Processing math: 100%
We will find a way, we always have.

-interstellar

분류 전체보기 305

토비와의 수다타임

토비의 스프링으로도 유명한 토비가 캠퍼스에 오셔서 수다타임을 진행해주셨다. 레벨 1,2 때까지만 해도 금서였던 토비의 스프링 저자를 만나게 되니 굉장히 신기했다. Q&A 형태로 진행했는데 몇가지 기억에 남는 것들을 남겨보려 한다. Q: 개발자의 삶에서 가장 중요한 태도는 무엇인가? 이 질문에 대해서 태도는 무엇인지? 개발자는 모든 개발자를 지칭하는 것인가? 이런식으로 역질문을 주셨다. 이런 행위를 통해 개발자의 삶에서 가장 중요한 태도가 무엇인지 보여주셨다. 질문, 의문을 가지고 내가 하는 일에 대해 '명확'함이 있어야 한다는 것이었다. (like T발 씨세요?) Q: 팀원과 안맞을 때는 어떻게 해야 하나요? 무언가 결정을 내릴 때 상대방의 감정도 중요한데 이 감정이 상하지 않도록 해야 한다고 했다. 그..

[Rust] 러스트에서 이분탐색

오늘 릿코드 데일리 풀다가 이분탐색을 사용할 일이 있어 러스트가 제공하는 이분탐색 라이브러리를 살펴보았는데, 재밌는 점을 발견하여 정리를 한다. (만약 데일리 풀이 코드가 궁금하다면 여기로) Vec에 binary_search 라는 함수가 있다. 만약 배열에 찾고자 하는 값이 있다면 해당 인덱스를 반환하고, 없다면 lower bound 즉 그 값이 들어가야 할 인덱스를 반환한다. 사실 자세한 설명은 아래에 첨부한 러스트 docs를 보는게 정확하고 친절하다. 그럼에도 이 글을 쓰는 이유는 러스트가 제공하는 이분탐색 함수가 파이썬이 제공하는 이분탐색 함수랑 다른 점이 있었고 여기서 러스트의 철학을 배웠기 때문이다. 파이썬이 제공했던 bisect 라이브러리와 달랐던 점은 무엇이었냐하면 Result로 한 번 값을..

[독서] 자바 / 스프링 개발자를 위한 실용주의 프로그래밍 - 5

8. 레이어드 아키텍처 8.1 레이어드 아키텍처의 최소 조건레이어드 아키텍처는 애플리케이션을 레이어로 나누고 각 레이어에 역할을 정한다. 대표적인 레이어로는 프레젠테이션, 비즈니스, 인프라스트럭처 같은 레이어가 있다. 한가지 유념해야 할 점은 레이어드 아키텍처는 한 사람에 의해 만들어진것이 아니라 여러 개발자의 필요에 의해 발전된 아키텍처이다. 그래서 사람마다 레이어드 아키텍처를 이해하는 깊이나 수준이 다르다. 누군가는 레이어를 단순히 파일을 구분하는 폴더 구조 정도로 이해하는 사람이 있고, 또 다른 누군가는 헥사고날 아키텍처 수준으로 사용한다.  레이어드 아키텍처에서 아키텍처란 "정책과 제약 조건을 이용해 목적을 달성"하는 것이다. 목적이 무엇인가에 따라 정책과 제약 조건은 변경될 수 있다는 것이다. ..

카테고리 없음 2024.11.10

[VM] 그랄VM (GraalVM)

최근 읽고 있는 도서 JVM 밑바닥까지 파헤치기에서 자바의 신기술 중 그랄VM이 무엇인지 잠깐 엿보았었다. 그런데 바로 다음날 if 카카오에서도 GraalVM 도입으로 JVM 백엔드 애플리케이션의 구동 초기 성능 문제 해결하기 라는 제목으로 발표영상이 올라와 이건 운명이다 생각하여 그랄VM이 뭔지 정리해보려고 한다. 그랄VM (GraalVM)2018년 4월 오라클 연구소는 그랄VM이라는 새로운 기술을 발표했다. "Run programs faster anywhere" 라는 구호로 등장했다.   사진 출처: https://blogs.oracle.com/java/post/for-building-programs-that-run-faster-anywhere-oracle-graalvm-enterprise-editi..

[백준] 15944번: 성공

🔈 문제당연한 이야기지만, 성공으로 가는 길이 항상 평탄하지만은 않다. 온갖 장애물이 가득하고, 장애물에 막혀서 주저앉을 수도 있다. 그래서 그 장애물을 폭파하려고 한다.성공으로 가는 길은 N×M격자 위에 놓여 있다. 성공으로 가려면 맨 왼쪽 위 칸에서 시작하여 장애물이 없는 상하좌우로 인접한 칸을 밟으면서 맨 오른쪽 아래 칸에 도착해야 한다. 한 번의 폭파 작업으로 D×D 격자 내에 있는 모든 장애물을 없앨 수 있다. 하지만 세상에 공짜는 없는 법. 폭파 작업에도 큰 힘이 들기 때문에, 성공으로 가려면 최소 몇 번의 폭파 작업이 필요한지 알고 싶다.📝입력첫 번째 줄에 격자의 행의 개수 N, 열의 개수 M, 폭파의 범위 D가 주어진다(D ≤ N, M ≤ 500, 1 ≤ D ≤ 100).그 다음 N개의..

[독서] 자바 / 스프링 개발자를 위한 실용주의 프로그래밍 - 4

스프링과 객체지향 설계6. 안티패턴6.1 스마트 UI스마트 UI 패턴은 에릭 에반스(Eric Evans)의 도메인 주도 설계에서 소개되어 유명해진 패턴이다. 스마트 UI란 시스템의 UI레벨에서 너무 많은 업무를 담당하는 것을 말한다.  스마트 UI는 데이터 입출력을 UI 레벨에서 처리스마트 UI는 비즈니스 로직도 UI 레벨에서 처리스마트 UI는 데이터베이스와 통신하는 코드도 UI레벨에서 처리 백엔드 개발자에게 UI, 즉 의사소통하기 위해 사용되는 인터페이스가 바로 API이다. 그리고 컨트롤러(Controller)는 API를 만드는 컴포넌트이다. 그렇기에 컨트롤러는 스프링에서 UI를 만드는 도구라고 볼 수 있다. 스프링에서 스마트 UI는 컨트롤러의 핸들러 메서드에 지나치게 많은 로직이 들어가 있는 경우를 ..

카테고리 없음 2024.11.04

[독서] 자바 / 스프링 개발자를 위한 실용주의 프로그래밍 - 3

5. 순환 참조 순환 참조는 두 개 이상의 객체나 컴포넌트가 서로를 참조함으로써 의존 관계에 사이클이 생긴 상황을 말한다. 예를 들어 객체 A가 객체 B를 참조하고, 객체 B가 다시 객체 A를 참조하는 양방향 참조는 대표적인 순환 참조의 예다. 이러한 순환 참조는 소프트웨어 설계에서 자주 볼 수 있는 대표적인 안티패턴 중 하나이다. JPA를 사용하다보면 @OneToMany와 @ManyToOne을 이용해 양방향 매핑(bidirectional mapping)을 적용하는 사례를 많이 접할 수 있다. JPA의 양방향 매핑은 순환 참조다. Team과 Member의 예제로도 많이 등장하는 양방향 매핑은 순환 참조라는 죄악의 면죄부처럼 사용되고 있는 거 같기도 하다. 순환 참조의 문제는 엔티티에서만 생기는 것이 아니..

카테고리 없음 2024.10.28

[독서] 자바 / 스프링 개발자를 위한 실용주의 프로그래밍 - 2

4. SOLID객체지향에서 좋은 설계와아키텍처를 이야기하면 빠지지 않고 나오는 것이 SOLID 원칙이다.  단일 책임 원칙(SRP: Single Responsibility Principle)개방 폐쇄 원칙(OCP: Open-Closed Principle)리스코프 치환 원칙(LSP: Liskov Substitution Principle)인터페이스 분리 원칙(ISP: Interface Segregation Principle)의존성 역전 원칙(DIP: Dependency Inversion Principle) 로버트 C.마틴이 2000년대 초반에 고안했으며 각 원칙은 객체지향 언어에서 좋은 설계를 얻기 위해 개발자가 지켜야 할 규범과 같은 것을 이야기한다. 그리고 각 원칙의 목표는 소프트웨어의 유지보수성과 확장..

카테고리 없음 2024.10.21

[독서] 자바 / 스프링 개발자를 위한 실용주의 프로그래밍 - 1

1부 객체지향1. 절차지향과 비교하기객체지향 이야기가 나올 때 친구처럼 나오는 녀석이 바로 절차지향이다. 절차지향(procedure oriented) 이전에 순차지향(sequential oriented)이라는 패러다임도 있었다.  순차, 절차 이렇게 놓고 보면 둘이 차이가 있는지 헷갈린다. 하지만 영문을 잘 해석해보면 살짝 다르다는 것을 알 수 있다. 순차지향은 진짜 말그대로 순차적으로(sequential) 라는 뜻으로, 코드를 위에서 아래로 읽겠다는 의미이고, 절차지향의 procedure는 직역하면 절차가 맞지만 컴퓨터 공학에서 말하는 Procedure는 사실 함수이다. 때문에 절차지향 프로그래밍은 사실상 함수 지향 프로그래밍으로 함수 위주로 생각하고 프로그램을 만드는 패러다임이다.  이후 "객체지향의..

카테고리 없음 2024.10.14