본문 바로가기

전체 글41

아이매드 댓글 다이얼로그 수정 동작 영상 댓글 작성 화면 변경댓글 작성 뿐만 아니라 댓글 수정 또한 사용할 수 있도록 하기 위해서 생각해본 결과 comment: String = "" 생성자 파라미터를 추가생성자 파라미터 설명CommentDialogFragment는 댓글을 작성하거나 수정할 수 있는 BottomSheetDialogFragment로, 아래와 같은 인자들을 전달받는다.- listener : 댓글 작성 또는 수정이 완료되었을 때 콜백을 전달하기 위한 인터페이스 - text: 댓글 작성 화면 상단부분에 제목 텍스트 (댓글 작성, 답글 작성) - parentId: 댓글, 답글 작성 시 어떤 댓글에 대한 것인지 식별하기 위한 ID(nullable) - comment: 댓글 수정 시 기존 텍스트를 입력창에 표시하기 위한 문자열 cl.. 2025. 5. 26.
답글(답글)구현 및 문제해결 대댓글 구현 방식1. 대댓글은 여러 개 일 수 있음으로 대댓글 버튼을 클릭 시 여러 개의 대댓글을 보여주는 리사이클러뷰, 어댑터의 객체가 필요하다고 판단.2. 아이템별로 클릭시 어댑터와 리사이클러뷰를 초기화하기로 결정3. 요청은 activity에서 답글의 클릭은 "댓글 어댑터"에서 진행4. "답글" 클릭시 액티비티에서 받아온 리스너를 통해 답글 요청을 진행하고 "답글" 데이터를 답글 어댑터에서 초기화5. 한번더 클릭 시 답글을 접을 수 있도록 구현진행1. 댓글 어댑터 부분의 답글 보기 클릭 시 (어댑터들과 액티비티의 상세 코드는 올리지 않겠다.) 댓글 클릭 여부 리스트댓글의 수와 맞는 리스트를 만들고 일단은 전부 false로 초기화해주었다.(클릭 여부)var parentComment = mutableLi.. 2025. 5. 20.
suspend 함수 suspend 개념코루틴 안에서만 호출 가능한 함수-> 이 작업은 오래 걸릴 수 있어요 -> 그래서 코루틴 안에서만 호출해야 합니다. (실제로도 코루틴 안에서 호출하지 않을 시 오류 발생) -> 메인 스레드는 화면을 그리느라 바쁘다! -> 그래서 시간이 오래걸리는 요청과 같은 역할은 비동기로! -> 코루틴 내부에서 실행 순서대로 해당 작업을 기다려 준다! 생각이걸 보면서 콜백 함수가 생각이 났다. 콜백 함수의 경우 요청후 응답 후 실행할 일들을 내부에서 처리하도록 코드를 작성하는데 이는 가독성이 떨어지며 유지보수도 힘듦 suspend 키워드를 사용하여 코드를 작성시 비동기 코드를 더 읽고 쉽게 관리할 수 있을 것 같다는 생각이 들음 실제로도 프로젝트를 진행하면서 처음에는 콜백 방식을 사용하였지만 이후에.. 2025. 5. 20.
안드로이드 댓글 좋아요 싫어요 기능 구현 아이매드 댓글 좋아요 싫어요 기능을 구현하기 위해 다음과 같이 고민하고 구현하였다.조건1. 불필요한 요청을 방지하기 위하여 일단은 좋아요 싫어요의 클릭은 화면상에서만 진행 되도록 2. 요청의 경우 화면을 이탈한 후에 상태 변화를 감지하고 실행하는 것으로 동작 영상 1. 불필요한 요청을 방지하기 위하여 일단은 좋아요 싫어요의 클릭은 화면상에서만 진행 되도록 1) 화면상에서의 변화(어댑터 부분)해당 부분의 경우 첫 초기화시 각 아이템의 좋아요 싫어요 상태를 저장하고 버튼 클릭시에 상태 값을 변경 및 UI 상에서만 클릭이 된것으로 처리 하였다.var likeStatus = mutableListOf()likeStatus = commentDetailList.map { it?.likeStatus?.toInt() ?.. 2025. 5. 19.
안드로이드[Kotlin] 액티비티 이동 애니메이션 적용 애니메이션 리소스 생성res.anim.none.xml res.anim.slide_in_left.xmlres.anim.slide_out_right.xml IntentoverrideActivityTransition(overrideType, enterAnim, exitAnim)SDK 34 버전부터 overridePendingTransition() 메서드가 Deprecated 되어 overrideActivityTransition()를 사용한다.버전 별 분기 처리가 필요val intent = Intent(requireContext(), YourActivity::class.java)startActivity(intent)if (Build.VERSION.SDK_INT>= 34) { requireCon.. 2025. 2. 20.
안드로이드 UI Lag 해결 상황작품 상세 정보 화면에서 스태프, 출연진을 로드할 때 errorImage가 들어가 있는 경우 심한 화면 버벅거림이 있는 상태였다. 원인현재 Glide를 사용하고 있었고 원인으로 추측 되는 부분은1. errorImage의 크기가 크다- 해당 부분은 현재 errorImage를 사용하는 경우 발생하므로 errorImage의 문제를 추측2. 너무 많은 이미지의 요청- 해당 부분의 경우 출연진, 스태프의 이미지를 로드할 때 그렇게 까지 많은 이미지를 로드하지는 않기에 아니라고 생각되었다. 해결예상대로 원인은 errorImage의 크기가 너무 큰 것이었고 거기에 이미지를 PNG 형식을 사용하고 있었다.- 일단 PNG 형식의 이미지를 삭제하고 VectorAsset의 이미지를 사용하였다.(교체가 가능한 이미지였음).. 2025. 2. 8.
[android] 텍스트 뷰 이미지 추가 텍스트 뷰에 drawableEnd로 이미지를 적용하려던 중 이미지가 너무 커 텍스트뷰의 화면 전체를 먹는 일이 발생 하였다.해당 부분을 해결하기위해 직접 코틀린 코드로 이미지의 크기를 정하고 이미지를 삽입하였다.방법은 아래와 같다. val drawable = ContextCompat.getDrawable(Context(), R.drawable.image)drawable?.setBounds(0,0, 50, 50) // 크기 조절//적용myTextView.setCompoundDrawables(null, null, drawable, null) // 텍스트뷰 어떤 위치에 이미지를 적용할지myTextView.compoundDrawablePadding = 8 // 글과 이미지의 padding 2025. 2. 5.
DialogFragment 등장 퇴장 애니메이션 적용 [Kotlin] 슬슬 애니메이션의 적용을 시작하기 위해 간단한 등장과 퇴장 애니메이션을 적용해 보았다.우선 결과물이다. 다이얼로그 등장 시에는 왼쪽에서 오른쪽으로, 퇴장 시에는 오른쪽에서 왼쪽으로 사라진다. 우선 res -> anim 파일 생성후 리소스 파일을 2개 생성한다. 하나는 등장 애니메이션, 또 다른 하나는 퇴장 애니메이션이다.1. 애니메이션 리소스 파일slide_in_left.xml slide_out_right.xml 2. 스타일 지정theme -> style 에서 미리 만들어 놓은 애니메이션 리소스를 아이템으로 지정한다.스타일 네임을 사용할 이름으로 만들고 밑에 아이템을 지정한다.그 밑의 아이템의 순서는 중요하지 않다.item name을 통해 어떤 상황에 작동할지 명시한다.android:windowEnter.. 2024. 12. 24.
안드로이드 팝업 메뉴에 이미지 추가 [Kotlin] 간단한 셀렉트 박스를 만들기 위해서 팝업 메뉴를 사용하여 구현도중 선택된 메뉴에는 이미지를 추가로 넣어줘야 하는 일이 생겼다. 코드var selectedItemId: Int? = R.id.aaa // 처음 이미지를 적용할 메뉴의 아이디 혹은 적용 x 시 nullprivate fun searchType() { // search_type 클릭 리스너 search_type.setOnClickListener { // 팝업 메뉴 객체 생성 및 메뉴 리소스 연결 val popupMenu = PopupMenu(requireContext(), search_type) popupMenu.menuInflater.inflate(R.menu.searc.. 2024. 12. 20.
이미지가 가로로 로드 되는 경우 상황커스텀 크롭 뷰에서 이미지를 크롭 하기 위한 기능을 만들던 도중 직접 찍은 사진의 경우 이미지가 가로로 로드되는 것을 확인하였다. 다른 다운로드한 사진이나 스크린샷 같은 경우 정상적으로 로드됨에 반하여 원인원인은 사진에는 exif 정보 라는 메타데이터가 존재하는데 이 정보에는 사진을 찍을 때의 각도 같은 정보 등이 담겨 있다. 그런데 내가 사용한 비트맵 팩토리에서는 이 exif 정보를 읽지 않고 그냥 가로로 사진을 로드한다고 한다. 해결해결 방법 자체는 간단하였다. Glide 라이브러리를 사용하거나 exif 정보를 읽어 그에 맞는 조치를 취해주면 된다.Glide를 사용하여 해결한 모습 fun setImageUri(imageUri: Uri) { Glide.with(this) .. 2024. 8. 9.
Fragment에서 menuInflater 사용 Activity에서 테스트용으로 만든 작품 검색 기능을 Fragment 화면으로 옮기는 과정에서 사용중이던 메뉴 화면을 사용하기 위해 menuInflater를 사용하려는데 사용되지 않는 문제가 발생하였다. 원인menuInflater는 Activity의 메서드 이기 때문에 Fragment에서는 사용이 불가능 하다. 해결해결 방법은 간단하였다. menuInflater이 아닌 requireActivity().menuInflater 로 선언하면 간단히 해결 된다. 2024. 7. 4.
리사이클러뷰 스크롤시 페이지 요청 작품 검색 요청을 진행하기 위하여 뷰를 스크롤 시 새로운 데이터를 받아오도록 진행을 하였다. 1. 먼저 스크롤시에 기존 데이터를 삭제하지 않고 추가해주는 방식으로 변경 해당 경우의 경우 우선 리사이클러뷰의 List -> MutableList로 변경해 주었다. - 새로운 검색어가 들어오는 경우에는 setList함수를 사용하여 처음 들어온 데이터로 리스트를 변경 fun setList(list: MutableList) { searchList = list notifyDataSetChanged() } - 기존의 검색어에서 스크롤만을 하였을 경우 addItems 함수를 사용하여 기존에 있던 데이터를 추가해 주는 방식으로 진행 하였다. fun addItems(newItems: List) { searchList.add.. 2024. 4. 24.
작품 검색 기능 로직 변경 기존에 만들어 두었던 작품 검색 기능에서는 입력된 text를 감지하여 text가 변화하였을 시 요청을 날리도록 구현 하였었다. 해당 부분에서 두 가지 정도의 문제점을 발견 하였는데 결론적으로는 하나의 원인이 해당 문제점을 만들었다. 기존의 코드 search.addTextChangedListener { val query: String = search.text.toString() params["query"] = query TokenRetrofitManager.getInstance(applicationContext).search(params) { response -> if (response.isSuccessful) { val searchResponse = response.body()?.data?.results.. 2024. 4. 22.
안드로이드 액티비티 라이프 사이클 액티비티 라이프 사이클 이란? 액티비티의 생성~ 종료까지의 과정을 말한다. Activity 클래스에서는 액티비티가 상태 변화를 알아차릴 수 있는 콜백 제공한다. 화면 전환, 화면이 가려짐, 종료 등시의 상태 변화 시에 자동으로 호출된다. 이러한 상태 변화가 있을때 마다 생명주기 메서드를 호출하여 상태 변화를 알려준다. 직접 실행을 통해 알아보자 밑에는 화면이 가려짐에 따라서 상태 변화가 어떻게 이루어지는지 알 수 있다. MainActivity class MainActivity : AppCompatActivity() { //생성된 화면 요소를 메모리에 로드 Activity가 생성되면 가장 먼저 호출됨 //화면 Layout 정의, View 생성, Databinding 등은 이곳에 구현함 //생명주기 통틀어서.. 2024. 4. 8.
안드로이드[코틀린] 이미지 밝기 조절 1. 해당 메서드 추가 private fun setRGB(progress: Int) = (progress * 0x10000 + progress * 0x100 + progress * 0x1) 2. 이미지에 적용 imageView.colorFilter = LightingColorFilter(setRGB(255), setRGB(0)) // 밝게 imageView.colorFilter = LightingColorFilter(setRGB(127), setRGB(0)) //어둡게 2024. 3. 29.
안드로이드[Kotlin] NumberPicker 사용(약간의 커스텀) 안드로이드의 기본으로 제공해 주는 NumberPicker을 사용하는데 기본 상태가 너무 못생겨 간단하게 손을 봐주었다. 결과물은 이러하다 NumberPicker에 사용할 백그라운드 drawable -> new -> drawable resource file에서 생성 gravity"center|fill_horizontal"적용 시 가운데 부분을 꽉 채울 수 있다.(대신 width부분은 의미가 없어짐) 가로넓이를 지정하고 싶다면 fill_horizontal을 지우고 width를 조절하면 된다. themes themes에서 NumberPicker의 텍스트 크기, 스타일 등을 지정할 수 있다. xml 리니어 레이아웃으로 뷰를 가로로 배치할 수 있게 만들고 3개의 리니어 레이아웃을 만들어 weight을 1씩 주어 .. 2024. 3. 28.
안드로이드[Kotlin] 여러 개의 버튼 처리 프로젝트를 진행하던 도중 같은 동작을 수행하는 다 수의 버튼을 처리해야 하는 일이 생겼다. 해당 문제를 해결하기 위해서 내가 사용한 방법은 리스트를 생성하여 해당 버튼의 아이디를 전부 넣어두어 해결하는 방법을 선택하였다.(해당 방법은 프래그먼트에서 수행하였다.) 1. 전역 변수 선언 val buttonList = mutableListOf() // 버튼의 아이디를 담아둘 리스트 val buttonClickStates = mutableMapOf() // 버튼의 클릭 여부를 확인하기 위한 맵 2. 해당 버튼의 초기화 및 클릭 이벤트 처리 private fun btnsClick() { //해당 부분에서 35개의 버튼을 전부 위에서 만든 전역변수에 넣어 주었다. //내 경우 버튼의 id를 btn_1 ~ btn_3.. 2024. 3. 27.
안드로이드[Kotlin] 버튼 클릭 시 background 색상 변경 해당 형태를 가진 TextView를 클릭시 해당 형태를 유지 시키며 색상을 변경해 보았다. 처음에는 이렇게 코드를 작성하니 기존에 만들어 두었던 형태를 유지하지 못하고 TextView의 전체가 색상이 변해 버렸다... TextView.setBackgroundColor(backgroundColor) 이렇게 변경해주니 제대로 형태를 유지하며 색상을 변경하는데 성공하였다. TextView.setOnClickListener { val backgroundDrawable = button.background if (backgroundDrawable is GradientDrawable) { backgroundDrawable.setColor(Color.parseColor("#FFFFFFF")) } } 2024. 3. 26.
java.lang.ClassCastException: androidx.viewpager2.widget.ViewPager2 cannot be cast to androidx.viewpager.widget.ViewPager [Viewpager 오류] 프래그먼트 화면 내에서 페이지를 이동시키는 이벤트를 처리하던 도중 java.lang.ClassCastException: androidx.viewpager2.widget.ViewPager2 cannot be cast to androidx.viewpager.widget.ViewPager 해당 오류가 발생하였다. 원인 ViewPager과 ViewPager2를 혼합하여 사용하려고 시도했을 때 발생한다. ViewPager과 ViewPager2는 엄연히 다르다. 둘을 혼합하여 사용 시에 해당 에러가 발생한다. 내 경우에는 xml 구성은 ViewPager2를 사용하였지만 정작 코드에서는 findViewById(R.id.viewPager) 이렇게 작성하였다. 해당 부분을 변경해 주면 된다. findViewById(R... 2024. 3. 24.
안드로이드 Textview 특수 문자 사용 안드로이드에서 화면을 만들기 위하여 TextView를 사용하던 중 &이라는 문자를 사용하려는데 오류가 발생하였다. "Unescaped & or nonterminated character/entity reference" 해결방법은 아주 간단하다. 시작 > 실행 > charmap에 들어가서 사용할 특수문자 클릭 맨 아래를 보면 'U+0026'이라고 되어있다. 해당 부분을 \u0026 로 바꾸어 text 입력창에서 사용하면 끝 2024. 3. 23.
안드로이드 웹 뷰 구글 로그인 카카오, 네이버, 구글 3개의 소셜 로그인을 웹 뷰를 사용해 구현하던 도중 구글 로그인에서만 문제가 생겨 확인해 보았다. 구글 로그인을 진행시에만 이러한 메시지가 화면에 나오는 상황 액세스 차단됨: IMAD의 요청이 Google 정책을 준수하지 않습니다. (앱 이름)의 요청이 Google의 '보안 브라우저 사용' 정책을 준수하지 않습니다. 이 앱에 웹사이트가 있는 경우 웹브라우저를 열고 웹사이트에서 로그인할 수 있습니다. 무선 네트워크에 액세스하려는 경우 이 안내를 따르세요 개발자에게 문의하여 앱이 Google의 '보안 브라우저 사용' 정책을 준수해야 한다고 알릴 수도 있습니다. 해당 자료 [ 보안뉴스 ](https://www.boannews.com/media/view.asp?idx=78883) 구글, .. 2024. 3. 16.
01. 컴퓨터가 이해하는 정보, 컴퓨터의 4가지 핵심 부품 컴퓨터 구조의 큰 그림 컴퓨터 구조에 대해서 어떤 것을 알아야 하느냐? 컴퓨터가 이해하는 정보 컴퓨터는 0과 1로 표현된 정보만을 이해한다. 0과 1만으로 표현되는 정보에는 크게 두 가지가 있다. 데이터 사진, 이미지, 동영상, 컴퓨터가 이해하는 숫자, 문자 등과 같은 정적인 정보를 가리켜 데이터라고 부른다. 컴퓨터와 주고받는 정보나 컴퓨터에 저장된 정보를 가리킬 때도 데이터라고 부른다. 명령어 컴퓨터는 명령을 처리하는 기계이다. 실질적으로 컴퓨터를 작동 시키는 정보 명령은 데이터를 움직이고 컴퓨터를 작동시킨다. 컴퓨터 프로그램은 '명령어들의 모음'으로 도 정의 된다. 즉 명령어는 컴퓨터를 작동시키는 정보이고, 데이터는 명령어를 위해 존재하는 재료이다. 컴퓨터의 네 가지 핵심 부품 다양한 컴퓨터 들(노트.. 2024. 1. 13.
컴퓨터 구조를 알아야 하는 이유 문제해결 같은 코드를 쓰더라도 제대로 동작하지 않는 경우가 있다. 코드상의 문법적 오류일 수도 있겠지만 이뿐만이 원인이 될 수는 없다. 프로그래밍 언어의 문법만 알고 있다면 해결을 할 수 없을 수도 있다. 하지만 컴퓨터 구조를 이해하고 있다면 문제상황을 빠르게 진단할 수 있고 더 나아가 문제 해결의 실마리를 다양하게 찾을 수 있다. 컴퓨터 내부를 거리낌 없이 들여다 볼 수 있다면 컴퓨터는 미지의 대상 -> 분석의 대상으로 바뀔 것이다. 성능, 용량, 비용 예를 들어 웹사이트를 개발 했다고 해보자 이를 구동시키기 위해서는 서버가 필요할 것이고 서버 컴퓨터가 필요할 것이다. 그런데 인터넷에 '서버 컴퓨터'라고 검색을 해보면 수많은 컴퓨터가 나올 것이다. 우리는 어떤 컴퓨터를 구매해야 하는가? 서버 컴퓨터마다.. 2024. 1. 13.
안드로이드 스튜디오 싱글톤 패턴 코틀린[Kotlin] 현재 통신 쪽을 구현할 일이 많이 생기다 보니 여러 클래스에서 같은 레트로핏 빌더를 사용해야 할 일이 많아져서 다른 클래스에서 사용시마다 구현하게 되는 비효율적인 일들이 많이 일어나 이를 해결하고자 하나의 인스턴스로부터 모든 것을 해결하자는 결론에 도달하였다. 우선 간단하게 싱글톤 패턴이 무엇인지 설명하고 직접 구현하도록 해보겠다. 싱글톤패턴 어떤 클래스의 인스턴스는 오직 하나임을 보장 -> 이 인스턴스는 전역에서 접근할 수 있는 디자인패턴이다. 왜 사용할까? 애플리케이션의 시작부터 종료까지 한 번의 생성으로 고정된 메모리 영역을 가지므로, 메모리를 효율적으로 사용할 수 있다. 구현 코틀린의 경우 object라는 키워드로 손쉽게 구현할 수 있다. - object는 프로세스가 메모리 상에 올라갈 때 곧바로.. 2024. 1. 7.
[Kotlin] viewPager2, indicator 결과물 설명 보통은 viewPager와 tabView를 같이 쓰지만 인디케이터만을 사용하기 위해서 직접 ImageView를 이용하여 인디케이터를 만들어 사용하였으며 페이지에 들어갈 프래그먼트는 이미 만들어둔 게 있어 만들어 둔 것을 사용하였다 viewpager, indicator viewPager 화면을 옆으로 넘기는 기능, 결과물과 같이 되어있다 보통은 TabView와 같이 사용하는 경우가 많다 indicator 화면을 넘기는 경우 몇 번째 화면인지 시각적으로 알려주기 위한 경우로 많이 사용됨 TabView에도 기능이 있다. 순서 1) Drawable에서 두 가지 파일을 만들어준다 하나는 선택된 페이지에서의 indicator 하나는 선택되지 않은 페이지에서의 indicator 선택되지 않은 페이지 in.. 2023. 12. 21.
Unresolved reference layout 갑자기 activity를 못찾는 오류가 생김 알고보니 import부분이 문제가 있어 해당 부분을 지워주었다. 해당 import를 지워준후에는 다시 정상적으로 잘 돌아왔다. 2023. 12. 19.
안드로이드 팝업 메뉴 Kotlin(코틀린) 오늘은 클릭을 했을 때 팝업메뉴를 띄어보겠다. 1. 화면 구성 TextView를 클릭했을때 메뉴창을 띄어줄 수 있도록 TextView 하나만 만들어 주었다. 2. 메뉴 아이템 구성 res -> New -> Android Resource Directory -> Resource type을 menu로 설정 메뉴 아이템목록을 원하는대로 만들어준다. 3. MainActivity 코드 TextView 뷰바인딩및 클릭이벤트 설정에서 textView를 클릭했을 시 메뉴창이 나타나도록 설정 후 메뉴 목록을 클릭했을 시 발생할 이벤트를 설정 class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super... 2023. 12. 13.
[Kotlin] Retrofit2 JSON 파싱 통신을 연습하기 위해 공공기관 api를 이용하여 json 파싱을 시도하였다. 포스트맨과, quickType을 이용하여 만들었다. 순서 1. 인터넷 사용권한 2. 레트로핏 2 라이브러리 적용 3. 화면 만들기 4. retrofit 빌더, 인터페이스 객체 생성, DTO클래스 생성 1. 인터넷 사용권한 우선 manifest에 인터넷 권한을 승인해 주자 2. 레트로핏 2 라이브러리 적용 build.gradle에서 레트로핏2 라이브러리와, Gson라이브러리를 적용시켜 주자 implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' 3. 화면 만들기 가져온 데이터를 x.. 2023. 11. 28.
[안드로이드]no type arguments expected for class response retrofit2 라이브러리를 사용하던 중 응답 메서드에서 아래와 같이 문제가 생겼다. 해당 부분의 오류 내용을 살펴보니 'no type arguments expected for class response'라는 내용이었다. 다른 사람들이 해결한 방법을 찾아보니 import부분이 잘못되었다는 내용이었다. 하지만 나는 그전에 테스트해 봤을 때는 아무 이상이 없었고 바뀐 것은 DTO클래스 부분의 내용만 바뀌었기에 그 부분은 문제가 없었다. 알고 보니 response:Response 이 부분이 레트로핏에 이미 존재하는 클래스 이름이기 때문에 이름을 다른 걸로 바꾸어 줘야 하는 것이었다. 그래서 Response 클래스의 이름을 ResponseData로 바꾸어주니 바로 해결되었다. 2023. 11. 28.
NetWork(네트워크) NetWork 정의 두 대 이상의 컴퓨터를 연결하는 것(인터넷을 통해서 클라이언트와 서버를 연결하는 것) 클라이언트와 서버의 연결 클라이언트: 사용자가 볼 수 있는 기기(n개) 서버: 사용자가 볼 수 없는 기기(1개) 네트워킹 서버와 클라이언트의 의사소통 네트워크 약속(프로토콜(통신규약))이 존재한다. 네트워크 프로토콜 여러 가지의 통신규약이 있지만 일단은 내가 필요한 HTTP만을 기억하자 FTP -> 파일 전송 규약 SMTP -> 메일 전송규약 HTTP -> 인터넷 서비스를 위한 규약 Request와 Response Request -> 클라이언트가 서버에게 보내는 요청 Response -> 서버가 클라이언트에게 보내는 응답 요청을 할 때는 Header와 Body가 있는데 둘 다 추가정보를 실은 상태로 .. 2023. 11. 23.