반응형

1.  프로젝트 생성

안드로이드 스튜디오 -> New Project -> Empty Views Activity 

 

2. 화면 생성

Empty View Activity 로 프로젝트를 생성하면 아래와 같은 프로젝트를 확인할 수 있다.

 

 

자 이제 그러면 이 괴상하게 생긴 프로젝트를 뜯어보자.

 

애뮬레이터관련 세팅은 모두 완료했다고 가정하고, 프로젝트를 시작시키면 hello world 페이지가 나온다.

이 페이지는 어떻게 나온걸까?

 

 

1) activity_main.xml

바로 이곳을 통해서 나왓다. 이곳은 프로젝트를 생성하면 기본적으로 주어지는 페이지이다.

 

아래와 같은 파일이 보일텐데 겁먹지말고 우측의 Split 을 눌러주자.

 

 

그러면 아래와 같이 코딩을 할 수 있는 화면과 우측의 미리보기 화면이 제공된다

 

앞으로 개발할때는 이 화면을 기본으로 두고 개발하면 된다.

 

왼쪽 코드영역에서 TextView 태그를 자세히 보면 android:text = "Hello World!" 가 보일텐데, 이것이 앱에 보이는 글씨다.

 

그렇다면 어떤 원리로 이 화면이 나오게 되는걸까?

 

2) MainActivity.kt

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

 

onCreate 라는 함수를 통해서 View 즉 화면을 생성한다.

 

create 를 할건데, 어떤 view를 보여줄것이냐? setContentView( ) 괄호를 보여줄것이다. 

괄호에 들어가는 파라미터는 R.layout. ~~ 이런 형식인데 R은 root 라고 생각하자.

 

프로젝트 root 에서 layout 폴더에 들어있는 xml들을 해당 파라미터에 넣을 수 있다.

현재는 activity_main 밖에없으므로 R.layout. 을 입력하면 자동완성으로 acitivity_main 이 보여질것이다.

(activity_main 을 Ctrl +우클릭 혹은 Ctrl + Alt 해보면 activity_main.xml로 이동됨)

 

이렇게 activity 를 통해서 view 화면이 앱에 보여지는데 정작 MainActivity는 어디서 실행되는걸까?

 

3) AndroidManifest.xml

 

이곳은 안드로이드 앱권한, intro 화면 설정, Activity 종류를 나열하는 곳이다.

새로운 Activity 를 생성하면 이곳에도 추가된다.

 

<activity> 태그를 보면 name 으로 MainActivity 가 적혀있는데, 이 태그는 MainActivity 에 대한 설정이라는 뜻

그리고 intent-filter 로

<action android:name="android.intent.action.MAIN" />

 

이것은 앱을 실행 시켰을 때 처음으로 진입하는 진입점이라는 표시다.

 

즉 해석하자면, MainActivity 가 있으며 이것은 앱을 실행했을때 가장 처음으로 노출되는 화면이라는 뜻이다.

 

 

3. 구조 정리

 

이렇게 프로젝트 생성과 어떻게 앱 화면이 노출되는지 순서대로 살펴보았다.

 

주요 개념은 아래와 같다.

 

build.gradle

dependencies 추가

 

manifests

앱권한, intro, mainActivity, splash 화면 설정

 

java

Activity 파일 위치하며, 로직을 작성하는 곳

 

res

이미지, 레이아웃, 화면을 그리는 xml 파일 등 resources가 위치함

 

728x90
반응형

Main 수정

저번 포스팅에서 만들었던 demo-main 모듈의 Main 클래스명을 변경하고 어노테이션을 달아주었다

@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class, args);
    }
}

 

해당 클래스 위치는 아래와 같다

application.yml 추가

그리고 나는 admin 과 main 모듈을 각각 실행시키고싶어서 port 설정을 추가해야하는 상황이라 application.yml을 추가해주었다

server:
  port: 8080

 

위치는 아래와 같이 resources 폴더를 만들고 그 안에 application.yml 을 추가하였다

 

Controller 생성

간단하게 테스트하기위하여 Restcontroller 로 생성하였다

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/main")
public class MainController {
    @ResponseBody
    @GetMapping("")
    public ResponseEntity index() {
        String result = "SUCCESS!!";

        return ApiResponseEntity
                .data()
                .put("result", result)
                .ok();
    }
}

 

위치는 아래와 같이 위치하면 된다

 

위 코드에 리턴타입이 ApiResponseentity 라고 되어있는데 해당 클래스는 core에 만들었다

 

Core 공통모듈 사용

 

이렇게 core 쪽에 내가 사용하고싶은 클래스를  추가하고 다른 모듈에서 자유롭게 불러서 사용가능하다

 

참고로 root 경로의 build.gradle 의  설정에 따라 타 모듈 -> core 연결이 가능한것이기 때문에

core -> 타 모듈 의 클래스를 import하는것은 불가능하다

728x90
반응형

 

spring boot 프로젝트 생성

 

intellij 에서 하든 spring 에서 하든.. 편한 방법으로 프로젝트를 생성한다

 

혹시 모르는 사람을 위하여 링크를 남겨둠

spring Initializr :  https://start.spring.io/

 

 

프로젝트 구조 수정

우선 root 경로의 src 폴더를 삭제한다

 

그리고 root 폴더 -> 우클릭 -> new -> Module 을 추가해준다

 

이때 내가 원하는 모듈갯수만큼 추가하면 된다

 

module name을 설정해주고

Build System 이 기본적으로 Maven 에 가있을건데 gradle로 해주자

아래 group Id 까지 설정해주면 완료

 

나는 총 3개의 모듈을 생성하였다

demo-main -> 사용자단 api 

demo-admin -> 관리자단 api

demo-core -> 공통 로직

 

 

전부 생성하게 되면 이런식의 구조를 확인할 수 있을것이다.

 

모듈 관계 설정

settings.gradle 설정

root 폴더 경로에 위치한 settings.gradle 에 모듈 설정을 추가해준다

rootProject.name = 'demo'
include 'demo-main', 'demo-admin', 'demo-core'

 

build.gradle 설정

모듈 별 공통 libraries 들을 설정해주고 각 모듈 별 관계성을 정리해주자

 

아래 내가 작업한 코드인데 눈여겨볼점은 project 설정부분이다

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.1.2'
	id 'io.spring.dependency-management' version '1.1.4'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '17'
}

configurations {
	implementation {
		extendsFrom annotationProcessor
	}
}

subprojects {
	apply plugin: 'java'
	apply plugin: 'java-library'
	apply plugin: 'org.springframework.boot'
	apply plugin: 'io.spring.dependency-management'

	configurations {
		compileOnly {
			extendsFrom annotationProcessor
		}
	}

	repositories {
		mavenCentral()
	}

	// 관리하는 모듈의 공통 dependencies
	dependencies {
		implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
		implementation 'org.springframework.boot:spring-boot-starter-web'
		compileOnly 'org.projectlombok:lombok'
		developmentOnly 'org.springframework.boot:spring-boot-devtools'
		implementation "org.mariadb.jdbc:mariadb-java-client:2.1.2"
		implementation 'org.springframework.boot:spring-boot-starter-validation'
		annotationProcessor 'org.projectlombok:lombok'
		testImplementation 'org.springframework.boot:spring-boot-starter-test'

	}

	test {
		useJUnitPlatform()
	}
}

project(':demo-main') {
	jar {
		archivesBaseName = 'demo-main'
	}
	dependencies {
		//컴파일 시 core 로드
		compileOnly project(':demo-core')
	}
}

project(':demo-admin') {
	jar {
		archivesBaseName = 'demo-admin'
	}
	dependencies {
		//컴파일 시 core 로드
		compileOnly project(':demo-core')
	}
}

project(':demo-core') {
	//bootJar로 패키징 할 필요 없음 Main() 메서드 필요없기때문
	bootJar { enabled = false }
	jar { enabled = true }
}

clean {
	delete file('src/main/generated')
}

 

 

configurations 에 compileOnly가 꼭 있어야 멀티모듈 dependencies 의 compileOnly 설정을 사용할 수 있다

subprojects {
	apply plugin: 'java'
	apply plugin: 'java-library'
	apply plugin: 'org.springframework.boot'
	apply plugin: 'io.spring.dependency-management'

	configurations {
		compileOnly {
			extendsFrom annotationProcessor
		}
	}
}

 

 

 

개별 모듈 build.gradle 설정

 

공통로직 모듈을 제외한 다른 모듈의 경우 아래와 같이 작성하면 된다

dependencies 에 core 모듈을 implementation 에 추가한다

plugins {
    id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    implementation project(':demo-core')

    testImplementation platform('org.junit:junit-bom:5.9.1')
    testImplementation 'org.junit.jupiter:junit-jupiter'
}

test {
    useJUnitPlatform()
}

 

core 모듈은 build.gradle 없애놓고 저장!

 

여기까지하면 모듈간 관계설정 세팅이 완료되었다.

 

다음 포스팅에서 실제로 활용해보자

 

728x90
반응형

 

Preferences -> Android -> SDK location 설정

 

Project -> 버전선택

728x90

+ Recent posts