오늘 공부한 내용 정리(2024년 7월 30일)
코드카타 문제풀이
Fly me to the Centauri(Gold 5, 1011번)
https://rkdrkd-history.tistory.com/164
5분 기록보드 활용 특강
이력서 사전 세션(5분 기록 보드로 20시간 절약하기)
부지런한 주니어는 빨리 취업한다.
최종 프로젝트의 의미
개발자로서 나의 기술적인 역량을 보여주기 위한 방법 + 동료 개발자와 소통 / 협업하는 방법을 배울 수 있는 기회
이력서와 면접
이력서: 내가 뭘 했는지 보여주는 문서.
면접: 이력서를 기반으로 내가 뭘 할 수 있는지 설명하는 미팅.
5분 기록 보드란?
노션에서 데이터베이스에 만들어서 내가 뭘 했는지 정리해 주면 된다(약 30초 ~ 1분).
꾸준히 쓰는 게 핵심
기록한 내용을 이력서로 바꾸기
기록 사항을 숫자를 이용해 정확한 통계를 기반으로 수를 작성해 주기.
예) 실행 시간이 10초 걸리는 코드를 1초로 줄였습니다.
위 사항을 준수하면 이력서에 기재해서 나의 역량을 어필할 수 있음.
제일 중요한 건 문제 해결 역량
문제 해결 역량: 나의 성장 가능성을 강조할 수 있는 영역
개발 관련 기술은 다른 영역에 비해 발전속도(변화)가 빠르다.
나는 다양한 기술에 대해 스스로 고민하고 적용할 수 있는 사람인가?
변화가 빠른 만큼 다양한 문제를 접할 수 있음. 그래서 특히 문제 해결 역량이 중요함.
면접 질문 팁
질문에 대한 대답은 개발자이기 때문에 기술적인 키워드를 섞어서 답변을 해주어야 함.
문제 해결 역량을 어필하기 위해서는 어떤 근거로 / 어떤 순서로 해당 기능을 구현하고 + 어떤 성과가 났는지 설명하기.
프로젝트와 관련된 Computer Science 지식 공부는 기본이다.
다양한 기록 수단을 통해, 나의 구현 항목에 대한 학습/자료조사 아카이빙
내가 적용했던 기술에 대한 질문은 단골 질문
요약
안드로이드 앱 개발 심화 1주 차
SharedPreferences 개념
안드로이드 앱 내에서 데이터를 저장하는 것은 앱에서 데이터를 사용하고 앱을 종료하면 데이터가 날아가는 게 아닌, 데이터가 저장된다는 뜻.(영구적으로 저장)
SharedPreferences를 사용하는 경우
프로그램 설정 정보(자동 로그인 여부, 프로그램 구성 등등) 같은 단순한 정보를 저장한다.
preferences를 불러오기.
val sp = getSharedPreferences("name", value)의 형태로 불러온다.
val edit = sp.edit()을 사용해서 수정 모드로 들어간다.
edit.putString("name", value)의 형태로 데이터를 저장한다(string 말고 다른 타입도 가능하다).
edit.apply()를 이용해 저장을 해준다.
preferences 사용하기.
sp.getString("name", "defaultValue")를 이용해 저장된 값을 불러온다(명확한 key를 명시해 주어야 한다).
Room 개념
SQLite를 쉽게 사용할 수 있는 데이터베이스 객체 매핑 라이브러리(데이터베이스를 가볍게 만들었음).
쉽게 Query를 사용할 수 있는 API를 제공한다.
Query를 컴파일 시간에 검증함.
Query 결과를 LiveData로 하여 데이터베이스가 변경될 때마다 쉽게 UI를 변경할 수 있음.
Room의 주요 요소
@Database: 클래스를 데이터베이스로 저장하는 annotation, RoomDatabase를 상속받은 클래스여야 함.
Room.databaseBuilder를 이용해 인스턴스를 생성함.
@Entity: 클래스를 테이블 스키마로 지정하는 annotation.
@Dao(Data Access Object): 클래스를 DAO로 지정하는 annotation.
기본적인 insert, delete, update Query를 제공하며, 복잡한 Query는 직접 제작 가능.
Room 사용을 위해서는 gradle 파일 설정을 해주어야 한다.
Entity 생성
@Entity("table_name")으로 테이블 스키마를 정의한다. 어노테이션 안에는 테이블의 이름을 적는다.
entity data class 내부에 @PrimaryKey 어노테이션으로 기본 키를 정의할 필드를 설정할 수 있다.
@ColumnInfo("column_name")로 data class의 필드 정보가 저장될 column의 이름을 정의할 수 있다.
Dao 생성
Dao는 interface나 abstract class로 정의되어야 한다.
Annotation을 이용해 Query를 정의하고 그 Query를 수행하기 위한 함수를 만들어 주어야 한다.
가능한 annotation으로는 @Insert, @Update, @Delete, @Query가 있음.
@Query("sql 쿼리 입력") annotation으로 커스텀 쿼리를 지정할 수 있다.
@Query("select * from table") fun getAllData(): LiveData<List<Data>>
LiveData를 리턴 타입으로 받으면 나중에 이 함수의 데이터가 업데이트될 때, Observer를 통해 실시간으로 불러올 수 있음.
Database 생성
RoomDatabase를 상속해서 자신의 Room 클래스를 만들어야 함.
포함되는 Entity와 데이터베이스 버전을 @Database annotation에 저장한다.
version이 기존에 저장되어 있는 데이터베이스보다 높으면 데이터베이스를 열 때 마이그레이션을 진행하게 된다.
마이그레이션 수행 방법은 RoomDataBase 객체의 addMigration()을 통해 알려줌.
Dao를 불러올 수 있는 getter 메서드를 생성함.
Room 클래스 인스턴스는 하나만 있으면 되기 때문에 Singleton 패턴을 사용함.
Room 클래스의 객체 생성은 Room.databaseBuilder()를 사용.
Retrofit 개념
서버와 클라이언트
서버: 데이터나 리소스를 제공하는 시스템. 사용자의 요청을 기다리고, 요청이 들어오면 그에 맞는 응답을 전송함.
클라이언트: 사용자를 대표하여 서버에 정보나 서비스를 요청하는 시스템, 웹 브라우저, 모바일 웹, 데스크톱 앱 등 다양한 형태로 존재함.
클라이언트에서 데이터를 요청하면 서버에서 데이터를 클라이언트에 제공한다.
서버와 클라이언트 간의 통신
서버와 클라이언트가 통신하는 방식은 다양하며, 사용하는 프로토콜, 용도, 성능 요구 사항 등에 따라 적절한 방식이 선택된다.
1. HTTP/HTTPS: 웹 기반의 애플리케이션에서 주로 사용. REST API나 SCAP이 해당된다.
2. WebSockets: 실시간 양방향 통신이 필요한 애플리케이션(채팅, 실시간 게임)에서 사용.
2가지 외에서 여러 통신 방법이 존재함.
API(Application Programming Interface)
서버가 클라이언트에게 리소스를 잘 활용할 수 있도록 인터페이스를 제공해 주는 것을 API라고 함.
식당에서 메뉴를 제공하듯, 리소스를 잘 활용할 수 있도록 API를 제공해 주어야 한다.
REST API
REST는 Representational State Transfer의 약자이다.
웹의 장점을 최대한 활용할 수 있는 그런 아키텍처 스타일을 의미한다.
www(world wide web) 자체가 REST 아키텍처 기반으로 구성되어 있다.
REST의 핵심 원칙
1. 자원(리소스)의 식별: 각 리소스는 고유한 URI로 식별된다.
2. 메시지의 상태를 통한 표현: 리소스는 JSON, XML 등의 형식으로 표현된다.
3. 상태가 없는(stateless) 통신: 각 요청은 서버에서 필요한 모든 정보를 표시하고 있어야 한다. 이를 통해 서버는 각 요청을 개별적으로 처리할 수 있다.
4. 클라이언트 - 서버 구조: 사용자 인터페이스와 데이터 저장소의 관심사가 분리되어 각각의 독립성이 높아진다.
5. 캐시 처리 가능: 응답 데이터에 캐싱이 가능한지 여부를 명시하여 성능을 향상 시킨다.
6. 계층화된 시스템: 서버와 클라잉언트 사이에 다양한 계층(보안, 로드 밸런싱 등)이 존재할 수 있다.
REST는 HTTP 프로토콜 위에서 구현되는 경우가 많다. 이때 HTTP 메서드로 GET, POST, PUT, DELETE가 존재한다.
REST 원칙을 지킨 API를 RESTful API라고 한다.
Retrofit
retrofit은 안드로이드 및 자바를 위한 타입 - 세이프한 HTTP 클라이언트 라이브러리이다.
REST API의 HTTP 요청을 자바 인터페이스로 변환하는 것을 주된 목적으로 한다.
장점
코드의 간결성: 복잡한 HTTP API 요청을 쉽고 간결하게 만들 수 있다.
안정성과 확장성: 내부적으로 OkHttp 라이브러리를 사용해 통신, 이를 통해 안정적인 통신이 가능하다.
다양한 플러그인과 컨버터 지원: 다양한 데이터 형식(JSON, XML 등)에 대해 데이터 변환 컨버터를 제공한다. 또한 RxJava, Coroutines와 같은 비동기 프로그래밍 라이브러리와도 연동이 가능하다.
오늘 공부 내용 정리 및 회고
오늘부터 데이터를 저장하는 방법 2가지(sharedPreferences, Room)와 retrofit을 공부했다.
Room은 이전에 공부한 데이터를 바탕으로 강의를 들어서 더 완벽하게 숙지할 수 있었다.
sharedPreferences와 retrofit은 이미 알고 있는 내용이었고.
내일은 남은 강의 모두 듣고 나서 개인 과제 B(더 어려움)를 구현해 보겠다.
개인 과제에서 기술들 모두 써도 된다고 해서 compose 감을 찾을 겸해서 compose로 구현해 보려 한다.
'♞ | 공부일지 > ♝ | TIL' 카테고리의 다른 글
[Android, 내일배움캠프] 공부일지(2024-08-01) (0) | 2024.08.01 |
---|---|
[Android, 내일배움캠프] 공부일지(2024-07-31) (0) | 2024.07.31 |
[Android, 내일배움캠프] 공부일지(2024-07-29) (0) | 2024.07.29 |
[Android, 내일배움캠프] 공부일지(2024-07-26) (2) | 2024.07.26 |
[Android, 내일배움캠프] 공부일지(2024-07-25) (0) | 2024.07.25 |