본문 바로가기
일상/독서의기록

Book Archive

by HJ0216 2024. 7. 14.

Created: 2024-07-14
Updated: 2024-07-28

Language

 

 

Computer Science

모두의 네트워크

0. 읽은 시기🗓️
2024.07

1. 책 소개📖
OSI모델과 TCP/IP 모델의 기초를 쌓을 수 있는 책

2. 독후감✍️
정보처리기사와 기술 면접을 대비해서 네트워크 기초를 공부해 본 적은 있지만, 취업 이후에는 네트워크와 관련된 작업을 하지 않다보니 자연스럽게 잊혀졌다. 그러다 올해부터 회사에서 미니 프로젝트를 진행할 것이라는 소식을 들었다. 어떤 내용으로 진행할지 고민하다, 이번 기회에 자주 접하고 있지만 잘 모르는 주제를 선정해서 공부하면 좋을 것 같다고 생각했다. 그리고 그 주제가 네트워크🛜가 됐다.
인터넷을 통해서 정보를 수집하는 것도 좋지만, 정제된 지식이 정리된 책을 읽어보면 좋을 것 같다는 생각에 구입한 책이다(교보문고 기준 네트워크 검색어 + 판매량 순으로 순위권에 보이지 않는 책이지만, 어디선가 추천 글을 보아서 샀다🫠).
개인적으로 추천하는 책이고, 추천하는 이유는 지식을 연결해주기 때문이다. 간단한 예시로 4계층(전송 계층)은 신뢰할 수 있는 통신을 구현하는 계층이라고 외웠었는데, 신뢰할 수 있는 통신을 어떻게 만드는지 쉽고 간단하게 알려준다.
이 책을 읽고 막연하게 '정보는 상호 합의하에.. 잘.. 주고 받고 있지 않을까🫠..?'라는 생각을 '눈에 보이지 않는 전파를 통해 데이터가 이동하고 있구나🤓!'로 바꿀 수 있었다(그래서 가끔은 전파가 늘 이렇게 우리랑 함께해도 건강에 괜찮은가🥸라는 생각도 한다).

3. 새롭게 알게 된 내용📑

웹 서버에서의 데이터 전달과 처리

  • 물리 계층
    데이터가 전기 신호로 웹 서버에 도착
  • 데이터 링크 계층
    이더넷 프레임의 목적지 MAC 주소와 자신의 MAC 주소 비교
    주소가 같으면 이더넷 헤더와 트레일러를 분리하고 네트워크 계층으로 전달
  • 네트워크 계층
    목적지의 IP 주소와 웹 서버의 IP 주소가 같은지 확인
    주소가 같으면 IP 헤더를 분리하고 전송 계층에 전달
  • 전송 계층
    목적지 포트 번호를 확인하여 어떤 애플리케이션으로 전달해야 되는지 판단
    TCP 헤더를 분리하여 응용 계층에 전달
  • 응용 계층
    전송 계층으로부터 받은 데이터를 애플리케이션에 맞게 해석하고 처리
    예: HTTP 요청이 도착하면 웹 서버는 이를 해석하여 적절한 웹 페이지를 반환

4. 구매처🛒

 

 

Database

SQL 첫걸음

0. 읽은 시기🗓️
2024.01

1. 책 소개📖
SQL 입문서

더보기

2. 독후감✍️
책이 쉽다. 그리고 MySQL🐬 환경이다. 다음 책은 SQL 레벨업인데, 그건 또 어렵다(그래서 읽는 걸 좀 미뤘다). SQL 기본 지식이 있는 상태(저는 SQLD를 소지하고 있습니다🙋‍♀️)라면, 이 책을 굳이 읽지 않아도 될 것 같다. 책도 얇고 단원이 잘 나눠져있어서 들고다니며 가볍게 보기 좋을 것 같다. 근데, 쿼리 좀 작성해봤으면 안 읽어도 될 것 같다.

3. 새롭게 알게 된 내용📑

새롭게 알게된 내용이나 알고 있던 내용을 깔끔하게 정리할 수 있도록 도와준 내용🤓!

-- * Null 값의 정렬 순서
--    * MySQL 기준 Null 값을 가장 작은 값으로 취급
--    * Oracle 기준 Null 값을 가장 큰 값으로 취급

-- * LIMIT
--    * 행수 제한
--    * where 조건절과 달리 order by 정렬 이후 최종적으로 수행
--    * OFFSET: 시작 위치 지정(0부터 시작)

select * from sample33 limit 3;

/*
+------+
| no   |
+------+
|    1 |
|    2 |
|    3 |
+------+
*/

select * from sample33 limit 3 offset 3;

/*
+------+
| no   |
+------+
|    4 |
|    5 |
|    6 |
+------+
*/

 

4. 구매처🛒

 

 

 

Code Quality

내 코드가 그렇게 이상한가요?

0. 읽은 시기🗓️
2024.03

1. 책 소개📖
좋은 코드 / 나쁜 코드로 배우는 설계 입문

2. 독후감✍️
누군가 내 코드를 읽으며 인상을 찌푸릴 때, 한 번쯤은 속으로 물었던 그 말. '제 코드가 그렇게 이상한가요..?'

코드 품질과 관련된 내용은 어째서인지 신입 개발자에게는 너무 성급한 주제라고 생각했다. 새로운 지식을 한창 쌓아갈 시기에 쌓인 지식을 다듬는 느낌이라 그간 미뤄왔는데, 한 번도 사용하지 않았던 MVVM패턴에 맞춰 기능을 구현하기 바빠 나도 내 코드를 보면서 ' 어😯? ' 하는 경우가 생겨 공부를 시작했다.

교보문고에 "코드"를 검색해서 판매량 기준으로 정렬하면, 좋은 책들과의 경쟁에서 밀려 3페이지 가장 마지막에 머물러있다. 하지만, 이 책은 내가 처음으로 코드 설계와 구조에 대해 관심을 갖게해준 책으로, 주변에 추천하고 싶은 책이다. 읽으면서 중요한 내용은 다시 복기하려고 적어두었는데, 문맥을 잊어버릴까봐 책도 결국은 샀다.

이 글을 수정하고 있는 24년 7월 기준 나는 C#을 쓰고 있는데, Java로 되어있는 예제 코드를 따라 쓰면서 오랜만에 다시 Java를 공부하는 재미도 있었다. 여러 좋은 내용이 있었지만, 프로젝트에서 이 책을 보고 적용해봤던 내용은 조건 분기 부분이었다. 책에서 설명한 조기 return을 활용하는 방법은 아래와 같다.

3. 새롭게 알게 된 내용📑

if(0 < member.hitPoint){
    if(member.canAct()){
        if(magic.costMagicPoint <= member.magicPoint){
            member.consumeMagicPoint(magic.costMagicPoint);
            member.chant(magic);
        }
    }
}


// 조기 리턴으로 중첩 제거하기 1
if(member.hitPoint <= 0) return;

if(member.canAct()){
    if(magic.costMagicPoint <= member.magicPoint){
        member.consumeMagicPoint(magi.costMagicPoint);
        member.chant(magic);
    }
}


// 조기 리턴으로 중첩 제거하기 2
if(member.hitPoint <= 0){
    return;
}
if(!member.canAct()){
    return;
}
if(member.magicPoint < magic.costMagicPoint){
    return;
}
member.consumeMagicPoint(magic.costMagicPoint);
member.chant(magic);

 

float hitPointRate = member.hitPoint / member.maxHitPoint;

if(hitPointRate == 0){
    currentHealthCondition = HealthCondition.dead;
}
else if(hitPointRate < 0.3){
    currentHealthCondition = HealthCondition.danger;
}
else if(hitPointRate < 0.5){
    currentHealthCondition = HealthCondition.caution;
}
else{
    currentHealthCondition = HealthCondition.fine;
}

return currentHealthCondition;


// 가독성을 낮추는 else 구문도 조기 리턴으로 해결하기 1
float hitPointRate = member.hitPoint / member.maxHitPoint;

if(hitPoint == 0){
    return HealthCondition.dead;
}
else if(hitPoint < 0.3){
    return HealthCondition.danger;
}
else if(hitPoint < 0.5){
    return HealthCondition.caution;
}
else{
    return HealthCondition.fine;
}


// 가독성을 낮추는 else 구문도 조기 리턴으로 해결하기 2
float hitPointRate = member.hitPoint / member.maxHitPoint;

if(hitPoint == 0){
    return HealthCondition.dead;
}
if(hitPoint < 0.3){
    return HealthCondition.danger;
}
if(hitPoint < 0.5){
    return HealthCondition.caution;
}

return HealthCondition.fine;

4. 구매처🛒

 

 

Etc.