Lirouti - 설계 복습편
·
SpringBoot/Lirouti
2달간 정말 바빴던 첫 springBoot 리루티 프로젝트가 막을 내렸다. 이후 간단한 마이그레이션 + 리펙토링하고 런칭하기로 했는데, 그동안 두달간 정리하지 못한 구현들에 정리해보고자 한다. Spring Boot 4.1 / Java 21로 구현하였고, Flyway + MySQL 8.4를 이용해서 스키마 관리를 진행했습니다. 도커 컴포즈와 깃 액션을 이용해서 배포를 진행했습니다😊 여기서 서버 가동 시점은 도커를 이용해서 MYSQL 컨테이너를 떠서 3306 포트로 대기하게 만든다. 이후 플라이웨이는 앱이 뜨면서 지금 서버가 최신 스키마 상태인지 확인한다. 이 두가지가 충족할 때, 서버가 프론트로부터 응답 받을 준비가 완료된다. 먼저 전체적인 구조는 아래와 같다.도메인 기반 개발을 진행했으며 요청은 위 -..
[SpringBoot] Spring Boot란? - DI 복습편
·
SpringBoot
서버 개발하면 가장 많이 들어본것이 스프링 부트일 것이다.그렇다면 스프링이란 무엇이고 부트 = 프레임 워크란 무엇일까? 프레임워크란?=> 목적을 쉽게 달성할 수 있도록 해당 목적과 관련된 코드의 뼈대를 미리 만들어둔 것을 의미합니다. 자주 사용하는 기능에 대해 기틀을 잡고 개발자는 그 안에서 구현할 수 있게 된다. 그렇다면 미리 만들어 둔 것이 무엇일까? 그걸 이해하려면 우선 api, 라이브러리에 대해 알아보자. api란?Application Programming Interface의 약자로 2개 이상의 소프트웨어 컴포넌트 사이에서 상호작용 할 수 있도록 정의된 인터페이스를 말합니다. 소프트웨어 애플리케이션들이 서로 데이터를 주고 받으며 통신할 수 있도록 만들어진 일련의 규칙이자 약속으로 어떤 기능을 사용..
[GUKK] 초대 딥링크 api 연동하기 - 1단계
·
안드로이드 프로그래밍📱/GUKK
딥링크로 초대하기 api 연동하기에 대해서 오늘 정리해보고자 한다. 앱 설치 유저의 경우 초대하기 딥링크 로직이 매우 간단하다.앱을 열어서, 딥링크 링크의 초대코드를 통해 api로 요청하고, 해당 화면으로 진입하면 된다. 문제는 앱 미설치 유저인 케이스이다.구현해야할 로직은 아래의 피그마 이미지와 같다. 앱 미설치 유저의 경우, 딥링크에서 앱 설치를 유도 -> 앱 설치 -> 온보딩 진입 -> 튜토리얼 -> 초대받은 방 상세 화면으로 진입해야한다. * 해당 로직은 어려우니 우선 앱 설치 기준 딥링크 처리 방식부터 정리해보자. 그렇다면 로직을 구현하기 위해서 안드로이드 개발을 해야할까? 서버 쪽에는 미리 assetlinks.json 파일을 요청했다.이 파일을 요청한 이유는 바로 이 서명 지문이 있는 것이 ..
람다, 리시버 람다 정리
·
안드로이드 프로그래밍📱/Kotlin📲 개념
오랜만에 람다와 리시버 람다에 대해서 정리하겠다.그 전에 람다가 왜 필요할까? 바로 쉽게 예시를 들면, class Box { var label: String = ""} 이런 객체가 있고 이 객체를 선언하고 활용하는 과정을 생각해보자.만약 이 객체에 label를 넣는 작업을 하고 싶다면 대부분 이렇게 떠올릴 것이다.fun makeBox (label: String): Box { val box = Box() box.label = label return box} 이렇게 박스마다 라벨링해서 내보내는 함수를 구현해볼 수 있을 것이다.그러나 보통 박스는 라벨만 있지 않다. 라벨, 운송번호, 택배기사성함, 도착지, 출발지, 받는 사람 (등) 엄청 많은 정보들이 있다. 그럴 때마다 상황에 맞춰서 ..
[SpringBoot] HTTP 웹 기본지식
·
카테고리 없음
인터넷 통신의 소통 방법은 어떻게 될까? 클라이언트, 서버는 각자 고유한 ip를 가진다.그러면 여기서 ip란 무엇일까? ip는 인터넷 프로토콜로 지정된 ip에 데이터를 전달한다. 패킷(통신 단위)로 데이터를 전달하며, ip 패킷은 출발지 ip, 목적지 ip, 기타 정보를 담고 있다. 클라이언트에서 패킷을 여러 노드를 거쳐서 서버로 전달한다. 그러면 서버는 여러 노드 거쳐서 패킷이 전달된다. 여기서 ip 프로토콜의 명확한 한계를 직면할 수 있다.- 비연결성 : 패킷(쉽게 말해 편지) 받을 대상이 없거나 전달 자체가 불능(서비스 불능) 상태여도 패킷 전송이 가능하다.- 비신뢰성 : 중간에 패킷이 사라지거나(소실), 패킷이 순서대로 안오면 방법이 없다.- 프로그램 구분 : 같은 ip를 사용하는 서버에서 통신..
LinkU 간단 회고록 및 구글 플레이 콘솔 테스트 앱 등록 후기 & 방법
·
안드로이드 프로그래밍📱
1년 동안 많은 우여곡절이 있었던... 링큐 안드로이드 프로젝트를 드디 구글 플레이 콘솔에 2주간 테스트 올릴 수 있게 되었다:)마이그레이션 + 바텀 네비게이션 중 하나의 탭 전체 기능이 다 바뀌어서... 정말 개발자로서 힘들었지만 이제 보니 뿌듯하다😊 지금 와서 보면 안드로이드에 아예 모를 때 프로젝트를 시작해서.. 코드의 아쉬움도 많다.. 네비게이션 경로 등록을 하드코딩 하는 등... 아주 기본적인 실수가 많았기에... 아쉽지만 그래도 점차 성장할 수 있어서 좋았다:) 테스트를 하면서 쉽게 놓칠 수 있는 포인트들을 잡을 수 있었다! 1) 사용자 depth의 문제 -> 링크 저장할 때, 기존에는 링크를 복사해서 다시 앱에 복귀해야하는 로직 즉, 앱이 백그라운드 -> 포그라운드 이동을 유저가 직접해..
[SpringBoot] API 설계하기 - 복습편
·
SpringBoot
먼저 API란 무엇일가?" Application Programming Interface " 의 약자로, 영문을 해석하면, 응용 프로그램 프로그래밍 인터페이스다. 쉽게 말하자면, 서로 다른 소프트웨어가 서로 주고 받을 수 있는 소통 방법이다. 인터페이스 = 어려운 것은 감추고 상호작용을 할 수 있도록 해주는 것을 의미합니다. REST API : Representational State Transfer의 약자로 자원(Resource)의 현재 상태(State)를 나타내는 표현을 주고 받는다라는 의미입니다. HTTP를 기반으로 하는 웹 서비스의 아키텍쳐로, HTTP 메소드와 자원을 이용해서 통신을 주고 받는 방법입니다:) HTTP 메소드는 REST 방식으로 통신할 때 필요한 작업을 표시하는 방법이다. 이 메소..
[AndroidStudio] dataStore state 반환
·
안드로이드 프로그래밍📱
데이터 스토어에서 저장한 최신 상태를 가져오는 코딩 연습을 해보자. 우선 나는 로그인한 여부를 다음 아래와 같은 코드로 구현했다.override val isLoggedIn: Flow = context.authDataStore.data.map { prefs -> prefs[Keys.LOGGED_IN] ?: false} 이렇게 로그인한 여부를 타입을 플로우 타입으로 지정했으며 이를 데이터 스토어에 map을 이용해서 저장했다. 여기서는 값을 가져오기에 map에서 파라미터 prefs를 통해 키 값을 통해 로그인 여부 값을 가져온다. 값이 없는 경우 false로 가져온다. 그러면 이 로그인 여부 최신 상태 값을 메인 뷰모델에서 가져오자. 이를 가져오는 이유는 이전에는 로그인한 상태인데 리프레쉬 토큰 만료(등..
[Kotlin] Producer-Consumer 패턴
·
안드로이드 프로그래밍📱/Kotlin📲 개념
Producer-Consumer 패턴 오늘은 Producer-Consumer 패턴에 대해 정리하고자 한다.간단하게 요약하자면, producer-consumer 패턴은 생산자와 소비자를 나누는 구조이다. producer : 처리 작업을 만듬task queue : producer 처리 작업을 잠시 보관한다.consumer : task 큐에서 작업을 하나씩 꺼내 처리함. 그림으로 살펴보자 그렇다면 디테일하게 개념을 살펴보자:) ProducerTask 끝까지 책임XTask 생성 작동 방식은 1) task 큐에 넣은 뒤, 2) 다음 일을 한다고 생각하면 된다! Task 큐버퍼 : data를 한 공간에서 다른 곳으로 전달할 때 양쪽의 속도 차이 극복하기 위해 data 임시로 모으는 메모리 공간코틀린에서는 코루..
[Android Studio] gradle 공부 1편(app 모듈, dependencies)
·
안드로이드 프로그래밍📱/Projects📲
매쉬업 출석체크 앱 리펙토링을 하면서 한 번 gradle에 대해 공부해보고자 한다😊 먼저 가장 중요한 프로젝트 전체의 버전을 한 곳에 관리하는 파일인 dependencies.gradle에 대해 알아보자.아래의 코드를 참고하자!// dependencies.gradle//일부만 기재함.ext { // Android androidBuildToolsVersion = "8.13.2" minVersion = 24 targetVersion = 36 compileVersion = 36 // kotlin kotlinVersion = "2.1.0" kotlinSerialization = "1.6.0" // compose composeVersion = '1.5...