웹브라우저에 URL을 입력하면 내가 PC의 주소창에다가 www.naver.com 을 입력하면 어떤 경로를 거쳐 네이버 화면이 보여지는가? 웹브라우저에서 URL을 입력하고, 이를 통해 OS가 서버에 접근하기 위해서는 서버의 IP 주소를 알아야 함. 서버 IP 주소를 알기 위해서는 PC 내에 있는 hosts 파일을 찾아본다. mac에 있는 hosts 파일은 대략 이렇게 생겼다. /etc/hosts 경로에서 찾을 수 있는데, 생각보다 웹사이트 주소가 기록된 게 없네..? 당황스러웠다. 그 다음에는 DNS Cache를 찾아본다. 이전에 질의한 IP 주소들을 캐싱해둔 파일에서 찾고자 하는 도메인에 대한 IP 주소를 확인할 수 있다.GPT를 찾아보니 이런 명령어로 쉽게 dns 캐시의 내용을 확인할 수 있다고 했는데..
VSCode로 작업을 하면서 MySQL을 JDBC로 연결해야하는 누군가 (중앙대 데베시 듣는 사람들) 을 위해 남긴다. 아래 영상을 보고 따라하려 했는데, 유튜브 자동 자막도 영어가 아닌 힌디어로 인식을 할 정도로 영어 발음이 영… 이라 깔끔하게 텍스트로 정리하려 했다 😂 혹시 영상자료가 필요하다면 아래 자료를 참고하면 된다! https://www.youtube.com/watch?v=YczqOe6btEA https://www.youtube.com/watch?v=Xrw0m_333OU 설치해야 하는 것들 JDK 설치 https://www.oracle.com/java/technologies/downloads/ Download the Latest Java LTS Free Subscribe to Java SE a..
올해가 벌써 1/4이나 지나가버렸다. 아직 하고싶은걸 많이 하지도 못했는데 벌써 꽃이 필 시간이라니… 첫 줄을 작성하는데, 벌써부터 늘 그렇듯 아쉽다는 생각이 드는건 어쩔 수 없는 것 같다. 다사다난했던 지난 3달의 기록을 남겨보려고 한다 😄 24년의 1월 ~ 3월은 꽤나 많은 경험을 하고, 스스로에게도 많은 변화가 있었다. 육체적으로나 정신적으로도 성장을 했다고 느낀다. 애플 아카데미 동문회 운영진 참여 이번에 애플 아카데미 알럼나이 커미티에 참여하게 되었다. 작년 kwdc에 갔을 때 여러 사람들을 만났는데, 처음에 지원할 때 내 포트폴리오를 보고 도움이 많이 되었다는 이야기를 해주면서 내적친밀감이 있어서 말을 걸어주신 분이 몇 분 계셨다. 사실 새로운 사람들과 네트워킹을 하거나 교류하는게 나에게는 되..
이번에 야곰 iOS 리팩토링 강의를 2기로 수강했다! ㅤㅤ 사건의 발단 플러터로 작성한 캡스톤 프로젝트를 리팩토링하면서 여러가지 고민이 있었다. 나름 구조를 고민하면서 코드를 수정하고 있었는데, 실질적으로 적절한 방향으로 계층을 분리하고 책임을 옮기고 있었나? 의존성을 분리하고 구체적인 코드를 빼내면서 모델을 추상화하고 재사용이 가능하도록 코드를 작성하려 노력했는데, 내가 잘하고 있는게 맞나? 한 커밋 한 커밋 리팩토링을 진행은 하고는 있었지만, 확신이 없는 느낌이였다. 쇠똥구리가 열심히 똥을 빚고 굴려도 똥은 똥… 🥲 ㅤㅤ 반 년동안 플러터로 프로젝트를 진행하면서 스위프트가 너무너무 그리웠다. 오버라이딩도 안되는 언어로 함수들을 깔끔하게 정리하는 것도 힘들고, 조악하게 조립해야하는 코드 형태가 너무 찝..
이번에 야곰 리펙토링 강의를 들으면서 Swift의 “프로토콜” 이 다른 언어에 비해 굉장히 특이한 컨셉을 가지고 있다는 걸 알았다. 어떻게 보면 abstract class나 interface를 통해 구현하는 OOP의 개념들이 프로토콜에 담겨있는데, 이게 구조체나 enum 타입에 모두 적용되게 한다는게 꽤나 놀라운 일이라고 생각된다. 구조체는 값 타입이라며!!! enum도 값 타입이라며!!! 내용이 나왔던 김에 강의에서 소개해준 관련된 WWDC 영상들을 보면서 어떤 컨셉으로 설계되었고, 어떻게 동작하는 건지 공부하면서 한 번 정리해보려고 한다. What I Learned 이번에 본 [ WWDC 15 의 Protocol-Oriented Programming in Swift ] 는 이미 많은 사람들이 블로그에..
이번에 최적화 과제를 수행하며 여러 글들을 찾아헤매다가 DateFormatter를 사용할 때 마다 생성해서 사용하는게 시간이 많이 잡아먹는 비싼 행위이기 때문에, 그렇게 하는 대신에 DateFormatter를 하나 생성해두고 재활용을 해야한다는 글을 봤다. 생각보다 다양한 글에서 해당 이슈에 대해 다루고 있었고, 직접 실행 시간을 측정하면서 성능을 비교하는 글들도 많았다. ㅤ 해당 글 들에서 다룬 방법을 나도 한 번 적용해보면서 함수의 성능을 측정하는 방법도 배우고 내가 개선한 방법이 유의미한 개선을 가져왔는지도 한 번 테스트해보려고 한다! ㅤ 테스트는 요 사이트에서 사용한 방법을 참고해 시도해봤다. https://sarunw.com/posts/how-expensive-is-dateformatter/ ㅤ..
이번에 야곰 iOS 강의를 들으면서 Array와 ContiguousArray 의 차이에 대해 설명을 들었다. 결론만 요약을 하면 Array는 obj-c 의 NSArray 와 브릿징될 수 있기 때문에, 이에 대비해 준비를 해둔다. ContiguousArray는 브릿징 X → 이를 준비하지 않기에 성능상으로 유리하다. 따라서, 가능한 경우에 ContiguousArray를 사용하는게 좋다! ㅤ 여기 내용을 들으면서 ContiguousArray 라는 것도 처음 알게되었고, objc와 swift 간의 브릿징(형변환)을 염두에 두고 내부적으로 관리를 하고 있다는 것도 처음 알게되었다. 그래서 요런 부분에 대해 조금 더 살펴보고 기록으로 남겨두려고 한다! ㅤ The Swift Array Design 라는 스위프트의 ..
최근에 개발을 공부하면서 ValueObject라는 녀석을 배웠다. 잘만 활용하면 코드를 무척이나 깔끔하게 다듬을 수 있을 것 같아서, 기록으로 남겨두려고 한다. ㅤ Identifier 라는 String을 담는 객체가 있다고 해보자. 여기에서 Idnetifier에는 한글, 영어, 띄어쓰기만 들어갈 수 있다는 규칙이 있다고 가정하자. 만약에 뷰모델에서 가진 함수 중에서 뷰에서 input을 받아와 Identifier 객체를 만들어주는 함수가 있다고 해보자. 그러면 뷰모델은 아래처럼 input 값이 유효한지 검사하고, 유효한 경우에 Identifier 객체를 생성해주어야 한다. ViewModel { func saveIdentifier(input: String) { let pattern = "^[가-힣a-zA-Z..
ㅤ 지금까지는 이미지를 네트워크에서 받아올 때에 FutureBuilder를 통해 에셋이미지를 로드하고, 이를 그려주는 방식으로 적용하고 있었다. 아무래도 Image 위젯 바깥에서 FutureBuilder로 이미지 에셋을 확인하고, 이를 Image 위젯으로 넣어주는 방법이다보니, 이미지와 관련된 로직이 Image 위젯 내에서 딱 처리가 된다는 느낌이 없어서 코드가 지저분하다고 느꼈었다. ㅤ FutureBuilder( // imageFuture가 불러와질 때 까지 아래의 위젯들을 조건에 맞게 보여주기 future: widget.imageFuture, builder: (context, snapshot) { // 데이터를 불러온 경우 if (snapshot.hasData) { return Image(snapsh..
ㅤ 이번에는 또 기묘한 UI를 만났다. ㅤ Flutter의 AppBar는 색상이 반투명한 글래스모피즘처럼 적용되어서, 아래로 스크롤을 올리니 자동으로 색이 반영되는 UI가 기본으로 있었다. 아래 GIF를 확인해보면, 상단 AppBar의 색이 움찔움찔 변경되는 것을 확인할 수 있다. ㅤ 나의 경우에는 바로 아래에 있는 캘린더도 AppBar 쪽에 붙어있기 때문에, 색이 끊겨보여서 이를 제거해주고 싶었다. 그러나, ‘flutter remove appbar background color changed on scroll’ 같은 검색어로 검색했는데, 해결 방법이 잘 나오지 않더라. ㅤ 설마 없겠어? 라고 생각을 하면서 AppBar 위젯의 어트리뷰트를 하나하나 찬찬히 뒤져보면서 해결 방법을 찾았다. AppBar( b..