diff --git "a/_posts/2023-09-17-spring-SpringMVC \352\265\254\355\230\204.md" "b/_posts/2023-09-17-spring-SpringMVC \352\265\254\355\230\204.md" index 79012bf..9629f3d 100644 --- "a/_posts/2023-09-17-spring-SpringMVC \352\265\254\355\230\204.md" +++ "b/_posts/2023-09-17-spring-SpringMVC \352\265\254\355\230\204.md" @@ -72,19 +72,48 @@ test { ```JAVA public class ApplicationInitializer implements WebApplicationInitializer { @Override - public void onStartup(javax.servlet.ServletContext servletContext) throws ServletException { + public void onStartup(ServletContext servletContext) throws ServletException { - AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); - context.register(SampleConfiguration.class); + AnnotationConfigWebApplicationContext webContext = new AnnotationConfigWebApplicationContext(); + webContext.register(WebConfigration.class); - DispatcherServlet dispatcherServlet = new DispatcherServlet(context); + AnnotationConfigWebApplicationContext apiContext = new AnnotationConfigWebApplicationContext(); + apiContext.register(APIConfiguration.class); - ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", dispatcherServlet); - dispatcher.addMapping("/"); + DispatcherServlet webDispatcherServlet = new DispatcherServlet(webContext); + DispatcherServlet apiDispatcherServlet = new DispatcherServlet(apiContext); + + ServletRegistration.Dynamic webDispatcher = servletContext.addServlet("webDispatcher", webDispatcherServlet); + webDispatcher.addMapping("/web/*"); + + ServletRegistration.Dynamic apiDispatcher = servletContext.addServlet("apiDispatcher", apiDispatcherServlet); + apiDispatcher.addMapping("/api/*"); } } ``` +- API Listener만 추가하는 방법 + +```java +@Override +public void onStartup(ServletContext servletContext) throws ServletException { + AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); + rootContext.register(APIConfiguration.class); + +// Manage the lifecycle of the root application context + servletContext.addListener(new ContextLoaderListener(rootContext)); + + AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext(); + dispatcherContext.register(WebConfigration.class); + + // Register and map the dispatcher servlet + ServletRegistration.Dynamic dispatcher = + servletContext.addServlet("web", new DispatcherServlet(dispatcherContext)); + //dispatcher.setLoadOnStartup(1); + dispatcher.addMapping("/"); +} +``` + - DispatcherServlet 등록 필수! ### Configuration @@ -92,17 +121,17 @@ public class ApplicationInitializer implements WebApplicationInitializer { ```JAVA @Configuration -@ComponentScan(basePackages = "spring.sample") -public class SampleConfiguration { +@ComponentScan(basePackages = "org.infinity.server.controller.api") +public class APIConfiguration { } ``` - Web설정 ```java -@EnableWebMvc -@ComponentScan(basePackages = "<패키지명>") -public class SampleConfiguration implements WebMvcConfigurer { +@EnableWebMvc +@ComponentScan(basePackages = "org.infinity.server.controller.web") +public class WebConfigration implements WebMvcConfigurer { @Override public void configureViewResolvers(ViewResolverRegistry registry) { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); @@ -114,15 +143,30 @@ public class SampleConfiguration implements WebMvcConfigurer { ``` ### Test Controller +- API Test + +```java +@Controller +@RequestMapping("/test") +public class apiTestController { + @GetMapping("") + @ResponseBody + public String testString(){ + return "test"; + } +} +``` + +- View Test ```java @Controller -@RequestMapping("/main") -public class IndexWebContoller { +@RequestMapping("/test") +public class webController { @GetMapping("") public ModelAndView getMainPage(){ ModelAndView mv = new ModelAndView(); - mv.setViewName("/index"); + mv.setViewName("test"); return mv; } } diff --git "a/_posts/2023-09-28-githubblog-Github Blog \353\247\214\353\223\244\352\270\260.md" "b/_posts/2023-09-28-githubblog-Github Blog \353\247\214\353\223\244\352\270\260.md" index 05361aa..a43ff3f 100644 --- "a/_posts/2023-09-28-githubblog-Github Blog \353\247\214\353\223\244\352\270\260.md" +++ "b/_posts/2023-09-28-githubblog-Github Blog \353\247\214\353\223\244\352\270\260.md" @@ -19,9 +19,10 @@ last_modified_at: 2023-09-28T08:00:00-10:00:00 # 내용 ## 필요한 Utility / Tool -- git +- Git +- SourceTree -### Jekyll 테마 사용을 위해 필요 +### Jekyll 테마 Utility - Ruby - Jekyll 과 Bundler @@ -44,9 +45,14 @@ last_modified_at: 2023-09-28T08:00:00-10:00:00 ![image](../../assets/images/GitRepositoryUrl.png) - 위와 같이 url을 복사하여 + 위와 같이 url 복사 후 SourceTree에서 Clone을 진행한다. -![image](../../assets/images/CloneBlogRepository.png)소스 Clone! +![image](../../assets/images/CloneBlogRepository.png) + +> +> SourceTree 대신 Git GUI Client를 사용해도 무방하다 + +[Git GUI Client 다운로드 링크](https://git-scm.com/download/gui/windows) ### Ruby 설치 @@ -109,5 +115,4 @@ last_modified_at: 2023-09-28T08:00:00-10:00:00 # 연결문서 - [Post Blog Content](../../githubblog/githubblog-Post-Blog-Content) -- [Blog Comment 적용](../../githubblog/githubblog-Blog-Comment-적용) - +- [Blog Comment 적용](../../githubblog/githubblog-Blog-Comment-적용) \ No newline at end of file diff --git "a/_posts/2023-10-02-\355\225\240\354\235\274-\355\225\264\354\225\274\355\225\240\354\235\274.md" "b/_posts/2023-10-02-\355\225\240\354\235\274-\355\225\264\354\225\274\355\225\240\354\235\274.md" index 1db5803..60cfb45 100644 --- "a/_posts/2023-10-02-\355\225\240\354\235\274-\355\225\264\354\225\274\355\225\240\354\235\274.md" +++ "b/_posts/2023-10-02-\355\225\240\354\235\274-\355\225\264\354\225\274\355\225\240\354\235\274.md" @@ -20,6 +20,8 @@ last_modified_at: 2023-10-02T08:00:00-10:00:00 - [ ] TripGG Api 만들기 - [ ] Spring MVC 단위테스트 만들기 - [ ] 옵시디언 확장 개발해보기.. +- [ ] multipart post +- [ ] @RequestBody post --- diff --git a/_posts/2023-10-11-oracle-Oracle Function.md b/_posts/2023-10-11-oracle-Oracle Function.md index 1b6eb90..6ee91e6 100644 --- a/_posts/2023-10-11-oracle-Oracle Function.md +++ b/_posts/2023-10-11-oracle-Oracle Function.md @@ -45,7 +45,15 @@ NVL(name, 0) ```sql NVL2(comm, 'Y', 'N') ``` - --- + +### REPLACE +- REPLACE(<컬럼명>, <변경대상 문자열>, <변경결과 문자열>) + +```SQL +UPDATE mytable SET FILE_PATH = REPLACE(FILE_PATH, '\\', '\/') +``` + +- --- # 연결문서 - [CommonDB](../../database/database-CommonDB) diff --git a/_posts/2023-10-17-cli-Window Command Detail.md b/_posts/2023-10-17-cli-Window Command Detail.md index 187ec0d..7d9b21b 100644 --- a/_posts/2023-10-17-cli-Window Command Detail.md +++ b/_posts/2023-10-17-cli-Window Command Detail.md @@ -96,6 +96,7 @@ tasklist /V - 서비스 관련 CLI #### sc delete \<서비스명\> +- 서비스 삭제 - **관리자 콘솔로만 사용 가능** ### tree diff --git a/_posts/2023-12-08-spring-Filter.md b/_posts/2023-12-08-spring-Filter.md index 995d5a8..405199e 100644 --- a/_posts/2023-12-08-spring-Filter.md +++ b/_posts/2023-12-08-spring-Filter.md @@ -18,8 +18,11 @@ last_modified_at: 2023-12-08T08:00:00-10:00:00 # 내용 +## 역할 +- J2EE 표준 스펙 기능으로 [DispatcherServlet](../../spring/spring-DispatcherServlet)에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대한 부가작업 처리 + ## 특징 -- DispatcherServlet에 요청이 전달되지 전, 후에 url 패턴에 맞는 모든 요청에 대한 처리 +- DispatcherServlet에 요청이 전달되기 전, 후에 url 패턴에 맞는 모든 요청에 대한 처리 - 스프링과 무관하게 전역적으로 처리해야 할 작업 수행 - ServletRequest/ServletResponse 객체를 조작 가능 - 웹 컨테이너에 의해 관리됨 @@ -67,3 +70,4 @@ public class SampleFilter1 implements Filter{ --- # 연결문서 +- [SpringMVC](../../spring/spring-SpringMVC) \ No newline at end of file diff --git a/_posts/2023-12-15-spring-DispatcherServlet.md b/_posts/2023-12-15-spring-DispatcherServlet.md index 590a215..45cd01f 100644 --- a/_posts/2023-12-15-spring-DispatcherServlet.md +++ b/_posts/2023-12-15-spring-DispatcherServlet.md @@ -89,4 +89,5 @@ public LocaleResolver localeResolver() { --- # 연결문서 -- [WebMvcConfigurer](../../spring/spring-WebMvcConfigurer) \ No newline at end of file +- [WebMvcConfigurer](../../spring/spring-WebMvcConfigurer) +- [SpringMVC](../../spring/spring-SpringMVC) \ No newline at end of file diff --git a/_posts/2024-01-03-itbusiness-RFP.md b/_posts/2024-01-03-itbusiness-RFP.md index 5cd4fce..7dc409e 100644 --- a/_posts/2024-01-03-itbusiness-RFP.md +++ b/_posts/2024-01-03-itbusiness-RFP.md @@ -31,3 +31,4 @@ last_modified_at: 2024-01-03T08:00:00-10:00:00 --- # 연결문서 +- [RNR](../../itbusiness/itbusiness-RNR) \ No newline at end of file diff --git a/_posts/2024-01-04-itbusiness-BMT.md b/_posts/2024-01-04-itbusiness-BMT.md new file mode 100644 index 0000000..a5a89a1 --- /dev/null +++ b/_posts/2024-01-04-itbusiness-BMT.md @@ -0,0 +1,29 @@ +--- +title : "BMT" +excerpt : "BMT" +toc : true +toc_sticky : true +toc_label : "BMT" +categories: +- ITBusiness +tags: +- [ITBusiness] +last_modified_at: 2024-01-04T08:00:00-10:00:00 +--- + +# 날짜 : 2024-01-04 18:39 + +# 태그 : #ITBusiness +--- + +# 내용 + +## 정의 +> BMT 란? +> Benchmark Test +> 품질 성능 평가 시험 +> 실존하는 비교 대상을 두고 하드웨어나 소프트웨어의 성능을 비교 분석하여 평가하는것 + +--- + +# 연결문서 diff --git a/_posts/2024-01-05-annotation-@Autowired.md b/_posts/2024-01-05-annotation-@Autowired.md new file mode 100644 index 0000000..6a23ab8 --- /dev/null +++ b/_posts/2024-01-05-annotation-@Autowired.md @@ -0,0 +1,81 @@ +--- +title : "@Autowired" +excerpt : "@Autowired" +toc : true +toc_sticky : true +toc_label : "@Autowired" +categories: +- Annotation +tags: +- [Spring, Annotation] +last_modified_at: 2024-01-05T08:00:00-10:00:00 +--- + +# 날짜 : 2024-01-05 18:14 + +# 태그 : #Spring #Annotation +--- + +# 내용 + +## Artifact +- spring-beans + +## 역할 +- 필요한 의존 객체의 타입에 해당하는 bean을 찾아 주입 +- 동일한 Bean이 2개 이상이면 오류를 발생 +- 두 개 이상의 클래스로 하나의 인터페이스를 구현할 경우 [@Qualifier](../../annotation/annotation-@Qualifier) Annotation으로 특정 Bean을 가져오겠다는 명시 필요 + +## 적용 대상 +- Constructor +- Setter +- Field + +## DI 방법 + +### Constructor Injection +- 가장 권장되는 방식의 DI 방식 +- 생성자에서 의존성을 주입받고자 하는 field를 나열하는 방법 +- 매개변수가 bean으로 등록되어있지 않다면 생성자에서 에러 발생 + +```java +@Service +public class MyService { + private MyDao myRepository; + + @Autowired + public MyService(MyRepository myRepository) { + this.myRepository = myRepository; + } +} +``` + +### Setter Injection +- setter 메소드에 @Autowired annotation을 선언 + +```java +@Service +public class MyService { + private MyDao myRepository; + + @Autowired + public setMyRepository(MyRepository myRepository) { + this.myRepository = myRepository; + } +} +``` + +### Field Injection +- 단일 책임의 원칙 위반, 객체의 오염 가능성이 있다는 단점 +- 사용하기 쉽다는 장점 +- field에 @Autowired annotation을 선언 + +```java +@Autowired +private ConfigValueWebService configValueWebService; +``` + +--- + +# 연결문서 +- [@Qualifier](../../annotation/annotation-@Qualifier) \ No newline at end of file diff --git a/_posts/2024-01-05-annotation-@Qualifier.md b/_posts/2024-01-05-annotation-@Qualifier.md new file mode 100644 index 0000000..9c74382 --- /dev/null +++ b/_posts/2024-01-05-annotation-@Qualifier.md @@ -0,0 +1,81 @@ +--- +title : "@Qualifier" +excerpt : "@Qualifier" +toc : true +toc_sticky : true +toc_label : "@Qualifier" +categories: +- Annotation +tags: +- [Spring, Annotation] +last_modified_at: 2024-01-05T08:00:00-10:00:00 +--- + +# 날짜 : 2024-01-05 18:11 + +# 태그 : #Spring #Annotation +--- + +# 내용 + +## Artifact +- spring-beans + +## 역할 +- [@Autowired](../../annotation/annotation-@Autowired)로 연결한 bean 목록에서 유일한 bean을 구별 + +> +> Spring은 동일한 타입을 가진 bean 객체가 2개 존재할 경우 어떤 bean을 주입할지 알 수 없기때문에 Exception을 발생시킴 + +## 사용법 + +### bean 선언 + +```java +@Bean +@Qualifier("myWebClient") +public class myWebClient implements WebClient { + ... +} +``` + +### Constructor Injection + +```java +public class MyClass { + private final WebClient webClient; + + @Autowired + public MyClass(@Qualifier("myWebClient") WebClient webClient) { + this.webClient = webClient; + } +} +``` + +### Setter Injection + +```java +public class MyClass { + private final WebClient webClient; + + @Autowired + public setWebClass(@Qualifier("myWebClient") WebClient webClient) { + this.webClient = webClient; + } +} +``` + +### Field Injection + +```java +public class MyClass { + @Autowired + @Qualifier("myWebClient") + private WebClient webClient; +} +``` + +--- + +# 연결문서 +- [@Autowired](../../annotation/annotation-@Autowired) \ No newline at end of file diff --git a/_posts/2024-01-08-annotation-@Resource.md b/_posts/2024-01-08-annotation-@Resource.md new file mode 100644 index 0000000..bb71050 --- /dev/null +++ b/_posts/2024-01-08-annotation-@Resource.md @@ -0,0 +1,65 @@ +--- +title : "@Resource" +excerpt : "@Resource" +toc : true +toc_sticky : true +toc_label : "@Resource" +categories: +- Annotation +tags: +- [Spring, Annotation] +last_modified_at: 2024-01-08T08:00:00-10:00:00 +--- + +# 날짜 : 2024-01-08 07:24 + +# 태그 : #Spring #Annotation +--- + +# 내용 + +## Artifact +- javax.annotation-api + +## 역할 +- 객체의 id가 일치하는 객체를 자동으로 주입 + +## 사용법 +- 반드시 기본 생성자가 정의되어 있어야함 + +### Field Injection + +```java +import javax.annotation.Resource; +public class UserRegisterService { + @Resource + private UserDao userDao; + + public UserRegisterServiceUseResource() { + ... + } +} +``` + +### Setter Injection + +```java +import javax.annotation.Resource; +public class UserRegisterService { + private UserDao userDao; + + public UserRegisterServiceUseResource() { + ... + } + + @Resource + public UserRegisterServiceUseResource(UserDao userDao) { + this.userDao = userDao; + } +} +``` + +--- + +# 연결문서 +- [@Autowired](../../annotation/annotation-@Autowired) \ No newline at end of file diff --git "a/_posts/2024-01-09-servercommon-\354\235\270\354\246\235\352\263\274 \354\235\270\352\260\200.md" "b/_posts/2024-01-09-servercommon-\354\235\270\354\246\235\352\263\274 \354\235\270\352\260\200.md" new file mode 100644 index 0000000..d9fbbc0 --- /dev/null +++ "b/_posts/2024-01-09-servercommon-\354\235\270\354\246\235\352\263\274 \354\235\270\352\260\200.md" @@ -0,0 +1,35 @@ +--- +title : "인증과 인가" +excerpt : "인증과 인가" +toc : true +toc_sticky : true +toc_label : "인증과 인가" +categories: +- ServerCommon +tags: +- [ServerCommon] +last_modified_at: 2024-01-09T08:00:00-10:00:00 +--- + +# 날짜 : 2024-01-09 15:19 + +# 태그 : #ServerCommon +--- + +# 내용 + +## 정의 +> 인증(Authentication) 이란? +> 해당 사용자가 본인이 맞는지를 확인하는 절차 + +> 인가(Authorization) 란? +> 인증된 사용자가 요청한 자원에 접근 가능한지를 결정하는 절차 + +## 관계 + +![image](../../assets/images/AuthenticationAndAuthoriztion.png) +- 인증을 거친 후 인가 절차 진행 + +--- + +# 연결문서 diff --git a/_posts/2024-01-09-spring-SpringSecurity.md b/_posts/2024-01-09-spring-SpringSecurity.md new file mode 100644 index 0000000..6644b23 --- /dev/null +++ b/_posts/2024-01-09-spring-SpringSecurity.md @@ -0,0 +1,58 @@ +--- +title : "SpringSecurity" +excerpt : "SpringSecurity" +toc : true +toc_sticky : true +toc_label : "SpringSecurity" +categories: +- Spring +tags: +- [Spring] +last_modified_at: 2024-01-09T08:00:00-10:00:00 +--- + +# 날짜 : 2024-01-09 15:16 + +# 태그 : #Spring +--- + +# 내용 + +## 정의 +> Spring Security란? +> Spring 기반의 애플리케이션 보안을 담당하는 스프링 하위 프레임워크 + +## 특징 +- Spring Security는 기본적으로 인증 절차 후 인가 절차를 진행 +- 인가 과정에서 해당 리소스에 대한 접근 권한이 있는지 확인 +- Principal(접근 주체) 을 아이디로 Credential(비밀번호)을 비밀번호로 사용하는 Credential 기반의 인증방식 사용 + +## 주요 모듈 + +### SecurityContextHolder +- 보안 주체의 세부 정보를 포함하여 응용프로그램의 현재 보안 컨텍스트에 대한 세부 정보 저장 + +### SecurityContext +- Authentication을 보관하는 역할 +- Authentication에 접근 가능 + +### Authentication +- 현재 접근하는 주체의 정보와 권한을 담는 Interface +- 이 객체를 SecurityContext에 저장됨 + +### AuthenticationProvider +- 실제 인증에 대한 부분을 처리 +- 인증 전의 Authentication 객체를 받아 인증이 완료된 객체를 반환 + +### Authentication Manager +- 인증 프로세스를 관리 +- AuthenticationProvider에게 인증을 위임하고, 인증이 성공하면 정보를 SecurityContext에 저장 +- 인증상태를 보관하기 위해 세션에 인증정보 저장 + +### UserDetail +- 인증이 성공하여 생성된 사용자 정보 객체 + +--- + +# 연결문서 +- [인증과 인가](../../servercommon/servercommon-인증과-인가) \ No newline at end of file diff --git a/_posts/2024-01-11-itbusiness-RNR.md b/_posts/2024-01-11-itbusiness-RNR.md new file mode 100644 index 0000000..9323543 --- /dev/null +++ b/_posts/2024-01-11-itbusiness-RNR.md @@ -0,0 +1,29 @@ +--- +title : "RNR" +excerpt : "RNR" +toc : true +toc_sticky : true +toc_label : "RNR" +categories: +- ITBusiness +tags: +- [ITBusiness] +last_modified_at: 2024-01-11T08:00:00-10:00:00 +--- + +# 날짜 : 2024-01-11 11:27 + +# 태그 : #ITBusiness +--- + +# 내용 + +## 정의 +> R&R 이란? +> Role & Responsibility +> 프로젝트 시 조직의 구성원간, 부서간, 회사간 역할 구분 및 책임 소재 + +--- + +# 연결문서 +- [RFP](../../itbusiness/itbusiness-RFP) \ No newline at end of file diff --git a/_posts/2024-01-16-servercommon-Multipart.md b/_posts/2024-01-16-servercommon-Multipart.md new file mode 100644 index 0000000..dc9339a --- /dev/null +++ b/_posts/2024-01-16-servercommon-Multipart.md @@ -0,0 +1,118 @@ +--- +title : "Multipart" +excerpt : "Multipart" +toc : true +toc_sticky : true +toc_label : "Multipart" +categories: +- ServerCommon +tags: +- [ServerCommon] +last_modified_at: 2024-01-16T08:00:00-10:00:00 +--- + +# 날짜 : 2024-01-16 11:40 + +# 태그 : #ServerCommon +--- + +# 내용 + +## 정의 +> Client와 Server 간에 전송되는 HTTP 요청 또는 응답에서 여러 종류의 데이터 타입을 동시에 전송하기 위해 사용되는 데이터 포맷 + +## 특징 +- 일반적으로 파일 업로드와 관련된 데이터를 전송하는데 사용 +- 파일 이진 데이터를 인코딩 하지 않고 원본 형식으로 전송 +- Content-Type 헤더에 **multipart/form-data** 값을 가짐 +- Multipart 형식의 데이터는 여러개의 part로 구성되며, 각 파트는 헤더와 본문으로 구성되어 있음 +- 헤더에는 메타 데이터가 포함되어 있고, 본문에는 실제 데이터가 포함됨 + +## 예시 + +### Multipart Request + +#### MultipartEntityBuilder 와 HttpPost를 사용한 방식 + +```java +private void sendRequest(RequestData requestData, File file) throws IOException { + MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create(); + entityBuilder.addTextBody("usage", "Y"); + entityBuilder.addTextBody("name", requestData.getAge(), ContentType.create("text/plain", StandardCharsets.UTF_8)); + entityBuilder.addTextBody("age", String.valueOf(RequestData.getName())); + entityBuilder.addBinaryBody("file", file, ContentType.DEFAULT_BINARY, file.getName()); + + HttpPost request = new HttpPost("http://test.com:8080/regist"); + request.setEntity(entityBuilder.build()); + + try (CloseableHttpClient httpClient = HttpClients.createDefault(); + CloseableHttpResponse response = httpClient.execute(request)) { + // Handle the response + String responseBody = EntityUtils.toString(response.getEntity()); + } +} +``` + +### Endpoint + +```java +@PostMapping("/regist") +public ResponseEntity registerUser(@Valid registerUserRequest request, BindingResult bindingResult) { + return new ResponseEntity(userService.regist(request), HttpStatus.OK); +``` + +### Multipart 파일 처리 + +```java +public String write(MultipartFile multipartFile, String subPath, String fileName) throws IOException { + String filePath = createFilePath(subPath, fileName); + createIfParentsDirNotExists(repositoryPath + filePath, fileName); + writeMultipartFile(multipartFile, repositoryPath, filePath); + return filePath; +} + +private void writeMultipartFile(MultipartFile multipartFile, String rootPath, String filePath) + throws IllegalStateException, IOException { + Assert.notNull(multipartFile, "file must not be null"); + Assert.isTrue(multipartFile.getSize() > 0, "size must be greater than 0"); + File targetFile = new File(rootPath + SEPARATOR + filePath); + multipartFile.transferTo(targetFile); +} +``` + +## Multipart RawData Example + +```http +POST http://61.109.169.41:7200/rpa/webadmin/publicfile/register HTTP/1.1 +Host: 61.109.169.41:7200 +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryXPLfucybaRfnOC6m +Origin: http://61.109.169.41:7200 +... + +------WebKitFormBoundaryXPLfucybaRfnOC6m +Content-Disposition: form-data; name="file"; filename="image (1).png" +Content-Type: image/png + +//바이너리 데이터 body + +------WebKitFormBoundaryXPLfucybaRfnOC6m +Content-Disposition: form-data; name="useExpiryDate" +20240215 +------WebKitFormBoundaryXPLfucybaRfnOC6m +Content-Disposition: form-data; name="useScopeCode" +GROUP +------WebKitFormBoundaryXPLfucybaRfnOC6m +Content-Disposition: form-data; name="readOnlyYn" +Y +------WebKitFormBoundaryXPLfucybaRfnOC6m +Content-Disposition: form-data; name="useYn" +Y +------WebKitFormBoundaryXPLfucybaRfnOC6m-- +``` + +> +> 라이브러리를 사용하여 Multipart 요청을 보낼수도 있지만 위와같은 포맷의 데이터를 만들어서 전송하기도 한다. + +--- + +# 연결문서 diff --git a/assets/images/AuthenticationAndAuthoriztion.png b/assets/images/AuthenticationAndAuthoriztion.png new file mode 100644 index 0000000..8df3bf5 Binary files /dev/null and b/assets/images/AuthenticationAndAuthoriztion.png differ diff --git a/assets/images/GitAuthenticationRepositoryToNetlify.png b/assets/images/GitAuthenticationRepositoryToNetlify.png deleted file mode 100644 index cd74767..0000000 Binary files a/assets/images/GitAuthenticationRepositoryToNetlify.png and /dev/null differ diff --git a/assets/images/Pasted Image 20231110154001_122.png b/assets/images/Pasted Image 20231110154001_122.png deleted file mode 100644 index 80327fe..0000000 Binary files a/assets/images/Pasted Image 20231110154001_122.png and /dev/null differ diff --git a/assets/images/Pasted Image 20231113151017_900.png b/assets/images/Pasted Image 20231113151017_900.png deleted file mode 100644 index fe31952..0000000 Binary files a/assets/images/Pasted Image 20231113151017_900.png and /dev/null differ diff --git a/assets/images/Pasted Image 20231115111845_526.png b/assets/images/Pasted Image 20231115111845_526.png deleted file mode 100644 index bcf24da..0000000 Binary files a/assets/images/Pasted Image 20231115111845_526.png and /dev/null differ diff --git a/assets/images/Pasted Image 20231115111915_529.png b/assets/images/Pasted Image 20231115111915_529.png deleted file mode 100644 index ea074fd..0000000 Binary files a/assets/images/Pasted Image 20231115111915_529.png and /dev/null differ diff --git a/assets/images/Pasted Image 20231115144020_246.png b/assets/images/Pasted Image 20231115144020_246.png deleted file mode 100644 index 9290e3f..0000000 Binary files a/assets/images/Pasted Image 20231115144020_246.png and /dev/null differ diff --git a/assets/images/Pasted Image 20231117223228_167.png b/assets/images/Pasted Image 20231117223228_167.png deleted file mode 100644 index cef295e..0000000 Binary files a/assets/images/Pasted Image 20231117223228_167.png and /dev/null differ diff --git a/assets/images/Pasted Image 20231117223733_288.png b/assets/images/Pasted Image 20231117223733_288.png deleted file mode 100644 index fed42cc..0000000 Binary files a/assets/images/Pasted Image 20231117223733_288.png and /dev/null differ diff --git a/assets/images/Pasted Image 20231122120205_911.png b/assets/images/Pasted Image 20231122120205_911.png deleted file mode 100644 index 99dbdf6..0000000 Binary files a/assets/images/Pasted Image 20231122120205_911.png and /dev/null differ diff --git a/assets/images/Pasted Image 20231123105215_761.png b/assets/images/Pasted Image 20231123105215_761.png deleted file mode 100644 index de7bc9b..0000000 Binary files a/assets/images/Pasted Image 20231123105215_761.png and /dev/null differ diff --git a/assets/images/Pasted Image 20231123105342_991.png b/assets/images/Pasted Image 20231123105342_991.png deleted file mode 100644 index ed896b6..0000000 Binary files a/assets/images/Pasted Image 20231123105342_991.png and /dev/null differ diff --git a/assets/images/Pasted Image 20231123105503_797.png b/assets/images/Pasted Image 20231123105503_797.png deleted file mode 100644 index e8bfaa6..0000000 Binary files a/assets/images/Pasted Image 20231123105503_797.png and /dev/null differ diff --git a/assets/images/Pasted Image 20231203205708_733.png b/assets/images/Pasted Image 20231203205708_733.png deleted file mode 100644 index f0656ee..0000000 Binary files a/assets/images/Pasted Image 20231203205708_733.png and /dev/null differ diff --git a/assets/images/Pasted Image 20231203214644_988.png b/assets/images/Pasted Image 20231203214644_988.png deleted file mode 100644 index 5718362..0000000 Binary files a/assets/images/Pasted Image 20231203214644_988.png and /dev/null differ diff --git a/assets/images/Pasted Image 20231207170831_877.png b/assets/images/Pasted Image 20231207170831_877.png deleted file mode 100644 index 98d5190..0000000 Binary files a/assets/images/Pasted Image 20231207170831_877.png and /dev/null differ diff --git a/assets/images/Pasted Image 20231207170842_850.png b/assets/images/Pasted Image 20231207170842_850.png deleted file mode 100644 index 4ab2c60..0000000 Binary files a/assets/images/Pasted Image 20231207170842_850.png and /dev/null differ diff --git a/assets/images/Pasted Image 20231215154232_014.png b/assets/images/Pasted Image 20231215154232_014.png deleted file mode 100644 index acc806f..0000000 Binary files a/assets/images/Pasted Image 20231215154232_014.png and /dev/null differ diff --git a/assets/images/Pasted Image 20231215154413_953.png b/assets/images/Pasted Image 20231215154413_953.png deleted file mode 100644 index c67fdb7..0000000 Binary files a/assets/images/Pasted Image 20231215154413_953.png and /dev/null differ diff --git a/assets/images/Pasted Image 20231222105754_957.png b/assets/images/Pasted Image 20231222105754_957.png deleted file mode 100644 index 15e75d3..0000000 Binary files a/assets/images/Pasted Image 20231222105754_957.png and /dev/null differ