스트림의 핵심 스트림은 함수형 프로그래밍에 기초한 패러다임이다. 스트림이 제공하는 표현력, 성능, 병렬성을 이해하기 위해서는 스트림 API 뿐만 아니라 함수형 프로그래밍이라는 패러다임까지 함께 받아들여야 한다. 함수형 프로그래밍 객체지향 프로그래밍 패러다임은 객체를 중심으로 사고하고 프로그램을 작성하는 것이다. 반면 함수형 프로그래밍은 데이터를 함수로 연결하는 것을 중심으로 사고하고 프로그램을 작성하는 것이다. 그렇다면 함수형 프로그래밍이 객체지향 프로그래밍 혹은 절차지향 프로그래밍과 반대되는 개념이 아닐까? 라는 생각을 가질 수 있다. 하지만 셋은 상호 배타적이지 않으며 대부분의 시스템은 이 세 가지 모두를 사용하는 경향이 있다. 그러므로 상반되는 패러다임이라고 생각하기 보다는, 애플리케이션을 구성하기..
스트림 (Stream) 스트림은 다량의 데이터 처리 작업을 위해 자바 8에서 등장했다. 컬렉션 처리를 위한 새로운 API라고 할 수도 있다. 스트림 구조 스트림은 초기 데이터→ 중간 연산 → 최종 연산 의 구조로 이루어져 있다. 메서드 체이닝 방식을 사용. 파이프라인 하나를 구성하는 모든 호출을 연결하여, 단 하나의 표현식으로 완성할 수 있다. Cars cars = new Cars(inputView.readCarNames() .stream() .map(Car::new) .collect(Collectors.toList())); parallelStream 메서드를 이용해 병렬 실행도 할 수 있다. 병렬 처리와 같은 부분은 성능적인 이슈가 반드시 따라오기 때문에, 스스로 잘 고려해보고 사용하는 것이 좋다. n..
🚩기나긴 여정의 시작 5기 OT가 끝나자마자, 첫 번째 미션이 나왔다. 회고 글을 쓰는 시점은 이미 미션을 완료한 지 2주가 지났지만... 여러 가지 준비할 게 많았고, 다른 글 쓸거리도 많이 밀려 있어서 이제야 작성하게 되었다 😅 첫 번째 미션은 자동차 게임을 구현하기였고, 페어와 함께 페어 프로그래밍을 진행해야 했다. 페어 프로그래밍...? 👨👦 첫 페어 프로그래밍 페어 프로그래밍이 있는 줄 알았지만 이렇게 빨리 시작되는 줄은 몰랐다 ㅎㅎ 페어가 발표됐다는 소식에 누굴까 두근두근 했고..... 첫 페어는 같은 온보딩 조였던 콩하나다! 우리 조는 두 번째 만남에서 모두 말을 놓기로 해서 편하게 대화하는 것에 대한 걱정은 하지 않았다. 미션 설명이 끝나고, 콩하나와 만나서 미션을 어떻게 진행할 건지 이..
toString ? toString을 들어보신 적이 있으신가요? 자바나 스프링을 사용하다보면 toString을 자연스럽게 볼 수 있을 것입니다. 그렇다면, 한 번쯤은 toString 을 객체의 값을 출력하기 위해 사용한 적이 있나요? 위 코드는 제가 레벨 1 자동차 경주 미션 첫 리뷰때 제출했던 코드입니다. toString 이름을 들었을 때는 객체의 값을 출력하기 위해 사용할 수 있을 것 같은 느낌이 듭니다. 과연 그럴까요..? 결론부터 말하면 toString 은 객체의 값을 출력하기 위한 용도가 아닌, 디버깅을 위한 용도로 사용됩니다. toString 의 일반 규약은 '간결하면서 사람이 읽기 쉬운 형태의 유익한 정보'를 반환하는 것입니다. 현재 toString 메서드는 뷰에 의존하고 있는 형태입니다. ..
자바가 1996년에 등장한 이후로 두 번의 큰 변화가 있었는데, 한 번은 JDK 1.5부터 추가된 지네릭스(generics)의 등장이고, 또 한 번은 JDK 1.8부터 추가된 람다식(lambda expression)의 등장이다. 특히 람다식의 도입으로 인해, 자바는 객체지향언어인 동시에 함수형 언어가 되었다. 람다식(Lambda Expression) 람다식이란 메서드를 하나의 식으로 표현한 것이다. 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로 익명 함수(Anonymous Function) 라고도 한다. 람다식은 메서드의 매개변수로 전달될 수 있고, 메서드의 결과로 반환될 수도 있다. 즉, 람다식으로 인해 메서드를 변수처럼 다루는 것이 가능해진 것이다. - 익명: 보통의 메서드와 달리 ..
스프링 부트 2.7 버전 이상과 Querydsl 5.0 버전 이상을 설정할 때 발생하는 에러입니다. Q타입 클래스를 만들기 위해 Gradle -> Tasks -> Other -> compileQuerydsl을 실행할 때 발생합니다. Querydsl과 gradle 설정 정보가 일치하지 않기 때문입니다. 1. 그러므로 build.gradle에 querydsl 버전 설정을 추가한 후 buildscript { ext { queryDslVersion = "5.0.0" } } 2. dependencies에 아래 2줄을 추가하면 됩니다. implementation "com.querydsl:querydsl-jpa:${queryDslVersion}" annotationProcessor "com.querydsl:query..
1차 합격 12월 14일 오후 3시에 1차 발표가 났습니다. 전 날까지는 긴장되지 않았는데 오후 2시쯤 되니 갑자기 긴장되고 시간이 잘 안 갔습니다,,, 정확히 오후 3시에 메일이 도착했고 다행히 1차 합격 소식을 받아볼 수 있었습니다. 당장 3일 뒤 오프라인 코딩테스트가 예정되어있어 빠르게 기차를 예매하고 최종 코테준비를 하려고 했으나.. 사실 1차 발표가 나기 전, 작년 최종 코테 문제인 페어 매칭을 풀었는데 생각보다 난이도가 어려웠어서 멘탈 관리를 위해 더 이상 하고 싶지 않았습니다. 그래도, 시험 전 날 지하철 노선도 문제를 풀어보고 최종 코테 준비를 마쳤습니다. 최종 코딩테스트 12/17일 오후 1시부터 6시까지 총 5시간 최종 코딩테스트를 진행했습니다. 12시에 도착해 미리 노트북을 세팅한 후..
dm-zoned-target.c가 I/O 과정의 흐름을 담당하는 함수들이 모여있었다면, dm-zoned-metadata.c는 I/O를 실행하기 위해 필요한 메타데이터들에 관한 함수들이 모여있는 코드입니다. Write 하기 위한 zone이 chunk와 매핑되어있는지, bio가 접근하는 chunk id는 몇 번인지, device 상태는 어떤지 등과 같은 원시적인 데이터와 관련된 로직들이 모여있습니다. 이 파일은 3000 라인이 넘는 많은 양의 코드이지만, 핵심적인 함수들을 우선 파악한다면 I/O 루틴을 보다 수월하게 이해할 수 있습니다. 함수를 소개하기에 앞서, metadata.c 에서 가장 많이 사용되는 zone 구조체와 dmap 구조체를 먼저 이해하고 넘어가겠습니다 ! dm_zone struct dm_z..
dm-zoned는 메타 데이터를 관리하는 dm-zoned-metadata.c, target device를 다루는 dm-zoned-target.c, regular block의 reclaim을 관리하는 dm-zoned-reclaim.c 총 3개의 C 파일과 dm-zoned.h 헤더 파일과 함께 구성되어 있습니다. I/O write Routine dm-zoned의 I/O write 루틴에서 다루는 함수가 정말 많기 때문에 관련된 모든 함수를 정확히 파악하기가 어렵습니다. 또한 참고할만한 레퍼런스가 없기 때문에 직접 코드를 하나씩 까보며 이해하는 과정이 필수입니다. 저 또한 해당 루틴을 파악하기 위해 커널에서 fio를 실행하여 trace 해보고, 코드를 분석하는 과정이 한 달 이상 소요되었습니다. 그러므로 함수..
4주 차를 보내며 처음 우테코 지원서를 작성할 때가 엊그제 같은데, 벌써 한 달이라는 시간이 흘러 프리코스의 마침표를 찍게 되었습니다. 한 달이라는 시간 동안 하루가 어떻게 지나가는지조차 모를 정도로 빠르게 느껴졌던 적이 없었던 것 같습니다. 마지막 4주 차 소감문에서는 좀 더 제한된 요구사항을 기반으로 객체지향적인 설계를 하며 겪었던 과정과 느낀 점을 담아보았습니다. 다리 건너기 객체 설계 다리 건너기 게임도 다른 과제들과 마찬가지로 그림을 그려가며 객체를 분리했습니다. 제가 설계한 구조에서 게임을 진행하는 핵심 객체들의 역할입니다. User: 다리 건너기 게임에 참가하는 사람입니다. 초기 시작 위치는 0입니다. BridgeMaker: 사용자가 원하는 크기의 다리를 생성합니다. Bridge: 다리 하나..
- Total
- Today
- Yesterday
- 우테코
- 5주차 회고
- 스프링 Logback
- CI/CD
- 환경 별 로깅 전략 분리
- dm-zoned 코드분석
- jpa
- 3차 데모데이
- java
- Spring
- 백준
- 회고
- 알림개선기
- 스프링 부트
- 8주차 회고
- 스프링 프레임워크
- 파이썬
- 피움 6주차 회고
- 피움
- 알림기능개선기
- dm-zoned
- 2차 데모데이
- ZNS
- 우테코 회고
- 네트워크
- 스프링MVC
- 프로젝트
- 런칭 페스티벌
- 팀프로젝트
- ZNS SSD
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |